Thanks for sharing this. I'm pretty sure what you suggest won't properly
deal with arrays. Objects aren't the same as arrays. Here's how I do
something like that:
function deepCopy(obj) {
if(obj && obj.constructor == Object) {
var newObj = new Object();
for(var field in obj) {
newObj[field] = deepCopy(obj[field]);
}
return newObj;
} else if(obj && obj.constructor == Array) {
var newArray = new Array();
for(var i = 0; i < obj.length; i++) {
newArray[i] = deepCopy(obj[i]);
}
return newArray;
}
return obj;
}
Also, while it's fine to use $ however you want in your own code, for code
that you're making public, I suggest you checkout the plugin authoring guide
about not using $ directly:
http://docs.jquery.com/Plugins/Authoring#Custom_Alias
--Erik
On 8/5/07, weepy <[EMAIL PROTECTED]> wrote:
>
>
> During assingment, if the object is not primative, Javascript will
> return a pointer to the object rather than a copy.
>
> E.g.
>
> a = [1,2]
> b = a
> b[0]=3
> a ==> [3,2]
>
> This clone function makes it possible to copy an object.
>
> $.clone = function (obj) {
> if(typeof(obj) != 'object') return obj;
> if(obj == null) return obj;
> var newobj = new Object();
> for(var i in obj)
> newobj[i] = $.clone(obj[i]);
> return newobj;
> }
>
> a = [1,2]
> b = $.clone(a)
> b[0]=3
> a ==> [1,2]
>
> I have found this function invaluable when comparing and complex
> Javascript objects.
>
>