How do I clone a JavaScript class instance?
It's hardly possible if the instance was created with heavy use of closures in the constructor function. We may never now which internal values were set, and how to reproduce such a setup. Therefore, the easiest way would be if every class offered a clone
function
which knows what to do.
normal jQuery extend just returns a vanilla object
Not necessarily, it returns what you passed in. Use
var clone = $.extend(true, Object.create(Object.getPrototypeOf(child)), child);
instead and your instanceof
usage will work fine. Note that the true
signifies a "deep" copy which may or may not be what you want. Also, $.extend
will happily copy enumerable inherited properties as well, so you might need to use a more sophisticated extend
function.
Or without jQuery at all, and only copying own, enumerable properties and only using a shallow copy:
var clone = Object.assign(Object.create(Object.getPrototypeOf(child)), child);
But again, not all objects will be clonable in this way, see my first point above.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…