0

In Javascript, I was searching for how to inherit an object when constructor has arguments. And i found the answer for this question.

Now I need to inherit two parent object to a child object, but the argument of the 2nd inherited object is the first inherited object. How to do this?

In the difficult way:

function ChildObj() { 
    this.Parent1 = new ParentObj1 ( arguments ); 
    this.Parent2 = new ParentObj2 ( this.Parent1);
}

But how to do it in this way:

function ChildObj() { 
   Parent1Obj.call ( this, arguments ) ;
   Parent2Obj.call( this, <<-- how to indicate Parent1Obj as argument -->> ) ;
}
4

1 に答える 1

0

最初に、JavaScript のプロトタイプの継承方法では、2 つの異なるプロトタイプ オブジェクトから継承できないことに注意してください。もちろん、これはあなたの質問では尋ねられていませんが、ChildObjs が から継承されていると仮定するとParent1.prototype、使用できず、もう必要ありません Parent2.prototype。つまり、コンストラクターから、 Mixin パターンParent2と呼ばれるオブジェクトにメソッドを追加する通常の関数に再構築したい場合があります。

Parent2オブジェクトで呼び出されたことを確認する方法はParent1?

引数として明示的に渡す必要はありません。ダック タイピングを使用すると、現在のインスタンス ( this) はParent1からメソッドやその他のプロパティを既に取得しているため、オブジェクトであることがわかりますParent1Obj.call(this, arguments)。プロトタイプ チェーンを正しくセットアップしたと仮定すると、Parent2適用されるオブジェクトもinstanceof Parent1.

もちろん、Parent1次の追加の引数としてコンストラクター関数を渡すこともできますthis。ただし、ミックスインの動作が、渡されたオブジェクトの [スーパー] コンストラクターに依存する必要があるかどうかはわかりません。より説明的なオプションを渡して、ChildObjコンストラクターに関数の代わりに適切なものを選択させる方がよい場合がありParent2ます。

于 2012-11-01T14:12:33.763 に答える