0

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

1 回答 1

0

首先请注意,在 JavaScript 的原型继承方式中,您不能从两个不同的原型对象继承。当然,您的问题中没有问到这一点,但是假设ChildObjs inherit from Parent1.prototype,您将无法使用并且不再需要 Parent2.prototype。这意味着您可能希望Parent2从构造函数重构为向对象添加方法的普通函数——称为Mixin 模式

如何判断Parent2它是在Parent1对象上调用的?

您不需要将其作为参数显式传递。this使用鸭子类型,可以知道当前实例 ( ) 是一个Parent1对象,因为它已经从Parent1Obj.call(this, arguments). 假设您已正确设置原型链,Parent2则应用的对象也是instanceof Parent1.

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

于 2012-11-01T14:12:33.763 回答