【问题标题】:How to inherit two parent object to a child object, but the argument of the 2nd inherited object is the 1st inherited object如何将两个父对象继承给一个子对象,但第二个继承对象的参数是第一个继承对象
【发布时间】:2012-11-01 13:50:15
【问题描述】:

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

【问题讨论】:

    标签: javascript object inheritance arguments


    【解决方案1】:

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

    如何告诉Parent2 它是在Parent1 对象上调用的?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2012-01-05
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      相关资源
      最近更新 更多