如何将两个父对象继承到子对象,但第二个继承对象的参数是第一个继承对象

时间:2012-11-01 13:50:16

标签: javascript object inheritance arguments

在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 -->> ) ;
}

1 个答案:

答案 0 :(得分:0)

首先请注意,在JavaScript的原型继承方式中,您无法从两个不同的原型对象继承。当然,在您的问题中未提及此问题,但假设ChildObj继承自Parent1.prototype,则您无法再使用且不再需要 Parent2.prototype 。这意味着您可能希望将Parent2从构造函数重构为向对象添加方法的常规函数​​ - 称为 Mixin模式

  

如何告诉Parent2Parent1对象上调用它?

您不需要将其明确地作为参数传递。使用duck typing,当前实例(this)可以被称为Parent1对象,因为它已经获得了Parent1Obj.call(this, arguments)的方法和其他属性。假设您已正确设置原型链,则应用Parent2的对象也为instanceof Parent1

当然,您也可以将Parent1构造函数作为this旁边的附加参数传递。但是,我不确定mixin的行为是否应该依赖于传递对象的[super]构造函数。传递一些更具描述性的选项可能会更好,让ChildObj构造函数选择正确的选项而不是Parent2函数。

相关问题