web-dev-qa-db-ja.com

親コンストラクター引数を継承する

同様のトピックのディスカッションを閲覧していますが、自分の状況が見つかりません...

パラメータを使用して親コンストラクタを呼び出そうとしています...正しく理解できていないようです。

PhysicsBodyスーパークラスがあり、aNodeを唯一のコンストラクタ引数として使用しています。

_function PhysicsBody(aNode) {
    this.userData = aNode;
    // ...
}
_

このPhysicsBodyDynamicBodyクラスを継承します。コンストラクタもaNodeを唯一の引数として受け取ります... Javaで行うのと同じように、"super(aNode");と同等のものを呼び出したいのですが、方法がわからないようです。

これがDynamicBodyクラスです:

_// Wanted to give "new PhysicsBody(this, aNode)", but that fails!
DynamicBody.prototype = new PhysicsBody();
DynamicBody.prototype.constructor=DynamicBody;

function DynamicBody(aNode) {

    // calling the parent constructor fails too:
    // PhysicsBody.prototype.constructor.call(this, aNode);
    //...
}
_
35
Jem

それを行う1つの方法:

function PhysicsBody( aNode ) {
    this.userData = aNode;
}

PhysicsBody.prototype.pbMethod = function () {};

function DynamicBody( aNode ) {
    PhysicsBody.call( this, aNode );
}

// setting up the inheritance
DynamicBody.prototype = Object.create( PhysicsBody.prototype );

DynamicBody.prototype.dbMethod = function () {};

今、あなたがするとき

var pb = new PhysicsBody( '...' );

インスタンスpbuserDataプロパティを取得し、PhysicsBody.prototype(この場合はpbMethod)からメソッドを継承します。


あなたがするとき

var db = new DynamicBody( '...' );

インスタンスdbuserDataプロパティを取得し、DynamicBody.prototype(この場合はdbMethod)からメソッドを継承します。これはPhysicsBody.prototypeから継承します。 。

58
Šime Vidas

私が正しく理解している場合、親コンストラクター引数を継承したいということは、new DynamicBody(1, 2, 3)DynamicBodyインスタンスに対してPhysicsBody(1, 2, 3)を内部的に呼び出すことを意味します。

これは、.applyおよびargumentsを渡す: http://jsfiddle.net/pmkrQ/

function DynamicBody() {
    PhysicsBody.apply(this, arguments);
}
10
pimvdb