在Javascript中克隆对象,维护instanceof
cloning an object in Javascript maintaining instanceof
我想在Javascript中克隆一个对象。我:
iPath = function () { this.heading = 0; this.path = []; };
loop = new iPath();
我知道我可以用jQuery做这样的事情:
cloneLoop = $.extend(true, {}, loop);
but
assert(cloneLoop instanceof iPath, "fails because loop is not an iPath");
我如何做一个深度克隆实现最后断言语句?
这个怎么样:
cloneLoop = $.extend(true, new iPath(), loop);
…虽然我不确定你是否想做一个深度拷贝。我觉得这样更好:
cloneLoop = $.extend(new iPath(), loop);
Extend只是将属性从一个对象复制到另一个对象。所以你必须从你想要复制到的对象的原始副本开始。所以用new iPath()
代替{}
。
var iPath = function () { this.heading = 0; this.path = []; };
loop = new iPath();
cloneLoop = $.extend(true, new iPath(), loop);
alert(cloneLoop instanceof iPath);
如果不支持旧版本的浏览器,您应该能够使用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);
警告true
,然后a
(至少在Chrome上,旧的浏览器将不支持Object.create)
您需要编写自己的clone
方法:
类似以下语句的内容:
iPath.prototype = {
clone: function () {
var p;
p = new iPath();
$.extend(true, p, this);
return p;
}
}
cloneLoop = loop.clone();
相关文章:
- instanceof是如何在JavaScript中实现的
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 调用C++中JScript中的instanceof运算符(IDispatch/IDispatchEx)
- 引用“;instanceof“/来自另一个范围的原型
- 如何确保变量范围在这个循环中得到维护
- JS new.target vs. instanceof
- 为什么在我的单元测试中instanceOf的测试失败
- 节点回调参数无法断言instanceof Error
- AngularJS:使用ng-show/hide动态维护下拉列表的3种状态(InProgress、Success、Err
- instanceOf函数在JavaScript中的实现
- 这里有一个更优雅的/DRY/可维护的JS解决方案
- 维护https和http之间的私钥
- 如何在不必维护每个文件的两个版本的情况下,将通用JavaScript和映像部署到两个不同的EAR
- node.js instanceof and cleartextStream
- 跨节点服务器上的多个 API 请求维护数据
- 节点.js 如何通过基本 Passport 在数据会话中维护所需的数据.js
- 如何维护对原型对象的访问
- Javascript 混淆了 null、instanceof 和 typeof 的语法不一致
- 在异步函数中维护变量的状态
- 在Javascript中克隆对象,维护instanceof