我想在Javascript中克隆一个对象。我有:
iPath = function () { this.heading = 0; this.path = []; };
loop = new iPath();我知道使用jQuery我可以这样做:
cloneLoop = $.extend(true, {}, loop);但是比
assert(cloneLoop instanceof iPath, "fails because loop is not an iPath");如何进行深度克隆来实现last assert语句?
发布于 2011-12-22 02:15:44
这样如何:
cloneLoop = $.extend(true, new iPath(), loop);...though,我不确定你是否想做一份深度拷贝。我认为这样会更好:
cloneLoop = $.extend(new iPath(), loop);发布于 2011-12-22 02:15:44
如果可以选择不支持较旧的浏览器,则应该能够使用Object.create
var cloneLoop = Object.create(loop);这是一个演示
function Foo() {
this.x = 1;
this.y = 1;
this.blah = { f: "a", g: "b" };
}
var f = new Foo();
var clone = Object.create(f);
alert(clone instanceof Foo);
alert(clone.blah.f);alerts true,然后是a (至少在Chrome上,较旧的浏览器不支持Object.create)
发布于 2011-12-22 02:22:31
Extend只是将属性从一个对象复制到另一个对象。因此,您必须从要复制到的对象的原始副本开始。所以使用new iPath()而不是{}。
var iPath = function () { this.heading = 0; this.path = []; };
loop = new iPath();
cloneLoop = $.extend(true, new iPath(), loop);
alert(cloneLoop instanceof iPath);https://stackoverflow.com/questions/8594384
复制相似问题