【发布时间】:2013-03-15 18:57:43
【问题描述】:
假设有一个带有 childType 属性的 JavaScript 对象,它是一个对象构造函数,并且您想编写一个通用的 addChild 方法。它需要创建 this.childType 的实例,并调用它的构造函数,将传入的任何参数传递给 addChild。
需要明确的是,重点是每个集合自己创建子对象,使用继承的泛型 addChild 方法及其已知的 childType,而不是验证传入的子对象的类型。
我不认为这很难做到,但是我尝试了各种方法,但到目前为止都失败了。
更新:
我已经用迄今为止我所知道的最佳解决方案更新了demo plunk,并在代码中包含了一些关于该问题的 cmets。下面讨论的失败尝试不再存在。此解决方案要求所有潜在的 chold 对象都具有“新的不可知论构造函数”,因此仍然不理想。欢迎进一步的想法。
我知道这条线是错误的,有两个原因:
var child = new this.childItemType.call(args);
首先,我认为需要将某种“this”传递给调用函数,但我不知道它会在那里。
第二个可能是第一个的结果,浏览器报错:
Uncaught TypeError: function call() { [native code] } is not a constructor
我认为这应该是可行的,但是到目前为止,从 this.childType 和传递的参数创建该子对象的语法让我无法理解。有人能指出这里丢失的脑细胞吗?
【问题讨论】:
-
var child = new this.childType(args);? -
var child = new this[this.childItemType](args); ?
-
我已经用 Clint 的“新的不可知论构造函数”解决方案更新了 plunk,据我所知,这是最实用的,即使它有缺点。我还添加了一些进一步澄清的 cmets。如果他在这里发布,我会将其标记为答案。
-
var child; childItemType.call(child, args)也是有效的。
标签: javascript object constructor