After going through the forums and looking at the source (Ext JS 3.2.1), I saw no one else that ran into the memory reference issue I have run into with Record.copy()'ing. For example, if I wish to work with a copy (clone) of a record, I should be able to do this on a record called "record"
Code:
var rec_copy = record.copy(); //could also pass in an ID
... and expect to be able to do something like this
Code:
var stuff = rec_copy.get('stuff');
delete stuff.foo; //remove the "foo" element from object "stuff"
... without modifying the "foo" element from object "stuff" inside of "record." But that is not the case! Putting all the code together, this will alert "undefined":
Code:
var rec_copy = record.copy(); //could also pass in an ID
var stuff = rec_copy.get('stuff');
delete stuff.foo; //remove the "foo" element from object "stuff"
alert(record.get('stuff').foo); //alerts "undefined" because the original record "record" was affected
If we were to clone a sheep or a human, I would expect that chopping off a leg of the cloned sheep/human would NOT magically remove the same leg from the original sheep/human. Therefore, this should not happen from cloning an Ext.data.Record either. If it isn't a true clone, don't put "(clone)" in the documentation. Here is my solution (hack) to make it a true clone:

Code:
Ext.data.Record.prototype.copy = function(newId)
{
    var new_data = Ext.apply({}, eval("("+Ext.encode(this.data)+")")); //eval(Ext.encode(the_object)) performs a true object clone
    return new this.constructor(new_data, newId || this.id);
}
Thoughts? Votes for/against? Rebuttal's?