构造函数采用对象而不复制对象

时间:2015-10-14 22:41:25

标签: javascript object prototype prototypal-inheritance

我想将一个普通的JavaScript对象变成一个带有原型等的对象,而不是克隆该对象。这可能吗?

基本上,而不是:

var MyClass = function(fromObj) {
  this.propA = fromObj.propA;
  this.propB = fromObj.propB;
  ...
}
inherit (SuperClass, MyClass);

我想:

var MyClass = function(fromObj) {
  this = fromObj;
}
inherit (SuperClass, MyClass);

要清楚:我希望从构造函数返回的对象与传入的对象相同(不是重复,而不是克隆)。

有没有办法实现这个目标?或者更好的方式来描述我的要求? :)

我喜欢这个有两个原因:

  1. 我们正在加载很多物品,速度和记忆可能会变得很重要。
  2. 有很多地方使用“普通旧javascript对象”,可能很难确保它们都指向新的实例化对象。

1 个答案:

答案 0 :(得分:1)

我想你想这样做,以便JSON.parse创建的对象是除Object之外的其他东西的实例。

一个选项是使用Object.setPrototypeOf分配来自指定构造函数的新[[Prototype]],但是performance warnings for this on MDN(我不知道声明的有效性)。< / p>

更有效的解决方案可能是创建&#34;包装&#34;对象并将JSON创建的对象作为属性附加。许多DOM库使用此方法,并避免JSON数据中的属性名称与对象的方法名称冲突的可能性(例如,DOM库可以使用与DOM方法具有相同名称和特征的方法,但不要使用#39 ; t覆盖或与他们发生冲突)。

数据可以保存在闭包中,这样只有构造函数定义的getter和setter才能访问它。