首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Javascript中克隆对象维护instanceof

在Javascript中克隆对象维护instanceof
EN

Stack Overflow用户
提问于 2011-12-22 02:12:55
回答 4查看 549关注 0票数 1

我想在Javascript中克隆一个对象。我有:

代码语言:javascript
运行
复制
 iPath = function () { this.heading = 0; this.path = []; };
 loop = new iPath();

我知道使用jQuery我可以这样做:

代码语言:javascript
运行
复制
 cloneLoop = $.extend(true, {}, loop);

但是比

代码语言:javascript
运行
复制
 assert(cloneLoop instanceof iPath, "fails because loop is not an iPath");

如何进行深度克隆来实现last assert语句?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-22 02:15:44

这样如何:

代码语言:javascript
运行
复制
cloneLoop = $.extend(true, new iPath(), loop);

...though,我不确定你是否想做一份深度拷贝。我认为这样会更好:

代码语言:javascript
运行
复制
cloneLoop = $.extend(new iPath(), loop);
票数 2
EN

Stack Overflow用户

发布于 2011-12-22 02:15:44

如果可以选择不支持较旧的浏览器,则应该能够使用Object.create

代码语言:javascript
运行
复制
var cloneLoop = Object.create(loop);

这是一个演示

代码语言:javascript
运行
复制
    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)

票数 1
EN

Stack Overflow用户

发布于 2011-12-22 02:22:31

Extend只是将属性从一个对象复制到另一个对象。因此,您必须从要复制到的对象的原始副本开始。所以使用new iPath()而不是{}

代码语言:javascript
运行
复制
var iPath = function () { this.heading = 0; this.path = []; };
loop = new iPath();

cloneLoop = $.extend(true, new iPath(), loop);

alert(cloneLoop instanceof iPath);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8594384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档