【问题标题】:Creating new objects using object literals使用对象字面量创建新对象
【发布时间】:2012-03-01 14:03:21
【问题描述】:

我有以下对象字面量:

var a = {a:1,b:2}

现在我想要同一个对象的另一个实例。如果我使用的是构造函数,我可以使用“new”运算符来执行此操作,即:

b = new a(); 

如何使用对象字面量创建对象的新实例?

【问题讨论】:

标签: javascript class object object-literal


【解决方案1】:

最简单的方法是使用Object.create

var b = Object.create(a);

console.log(b.a); //1
console.log(b.b); //2

DEMO

当然,如果您需要支持旧版浏览器,您可以获得 Object.create here 的 MDN shim

【讨论】:

  • 使用这种方法,一不小心会不会有造成内存泄漏的风险?如果一个对象像这样被反复“克隆”,它的原型链将会增长,并且原型链中的所有这些对象将永远不会被垃圾回收,因为对它们的活动引用将保留。这不是一个大问题,因为大多数 JavaScript 脚本都是短暂的,但我认为意识到这种可能性是明智的。
  • @CDSanchez - 是的 - 新对象似乎确实共享旧对象的原型 - demo - 我认为原型不会增长。如果您克隆 a 100 次,您将拥有 100 个引用回 a 的对象。所以是的,a 不能被垃圾收集,但我不认为这是一个大问题
  • 我指的是如果你以某种方式继续克隆同样被克隆的对象。例如,a = {}; loop 99 times { a = Object.create(a) } 在这种情况下,您将有 100 个对象,原始对象位于原型链的末尾,而 99 个对象位于前面。在实践中有人可能会做这样的事情并不是完全不可想象的。无论如何,我会保留它,因为这可能不会影响 OP - 我只是想指出这一点。
  • @CDSanchez - 哦,是的 - 那太糟糕了。是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
相关资源
最近更新 更多