在Javascript中,我正在搜索构造函数有参数时如何继承对象。我找到了这个问题的答案。
现在我需要将两个父对象继承到子对象,但第二个继承对象的参数是第一个继承的对象。怎么做?
困难之处:
function ChildObj() {
this.Parent1 = new ParentObj1 ( arguments );
this.Parent2 = new ParentObj2 ( this.Parent1);
}
但是如何以这种方式做到:
function ChildObj() {
Parent1Obj.call ( this, arguments ) ;
Parent2Obj.call( this, <<-- how to indicate Parent1Obj as argument -->> ) ;
}
答案 0 :(得分:0)
首先请注意,在JavaScript的原型继承方式中,您无法从两个不同的原型对象继承。当然,在您的问题中未提及此问题,但假设ChildObj
继承自Parent1.prototype
,则您无法再使用且不再需要 Parent2.prototype
。这意味着您可能希望将Parent2
从构造函数重构为向对象添加方法的常规函数 - 称为 Mixin模式。
如何告诉
Parent2
在Parent1
对象上调用它?
您不需要将其明确地作为参数传递。使用duck typing,当前实例(this
)可以被称为Parent1
对象,因为它已经获得了Parent1Obj.call(this, arguments)
的方法和其他属性。假设您已正确设置原型链,则应用Parent2
的对象也为instanceof Parent1
。
当然,您也可以将Parent1
构造函数作为this
旁边的附加参数传递。但是,我不确定mixin的行为是否应该依赖于传递对象的[super]构造函数。传递一些更具描述性的选项可能会更好,让ChildObj
构造函数选择正确的选项而不是Parent2
函数。