4

ノード内のいくつかのカスタムクラスに非常に単純な継承を実装しようとしています。私はこのようなことをしています:

function MyClass() {
    this.myFunction = function(){
        //do something
    }
}

function MySubclass(){
    this.myOtherFunction = function(){
         //do something else
    }
}

util.inherits(MySubclass, MyClass)
console.log(MySubclass.super_ === MyClass); // true

var x = new MySubclass()
console.log(x instanceof MyClass); // true

x.myFunction()

これを実行すると、次のエラーが発生します。

TypeError: Object #<MySubclass> has no method 'myFunction'

この正確なパターンは、events.EventEmitterから継承する場合に完全に機能します。カスタムクラスでは機能しないのでしょうか、それとも何か足りないものがありますか?

4

1 に答える 1

8

util.inheritsプロトタイプ チェーンを設定するだけです。あなたが見逃しているのは、スーパーコンストラクターを呼び出して、に何かを追加することthisです。方法は次のとおりです。

function MyClass() {
    this.myFunction = function() {
        // Do something
    };
}

MyClass.prototype.doFoo = function () {
};

function MySubclass() {
    // This is doing the same as MyClass.apply(this, arguments);
    MySubclass.super_.apply(this, arguments);

    this.myOtherFunction = function() {
        // Do some other thing
    };
}

util.inherits(MySubclass, MyClass);

MySubclass.prototype.doBar = function() {
};

var x = new MySubclass();
x.myFunction();
x.myOtherFunction();
x.doFoo();
x.doBar();

これらのメソッドを各プロトタイプに移動したい場合があります。

于 2012-12-20T17:04:16.177 に答える