10

私はこのコードを持っています:

var MyClass = function(b) {
    this.a = b;
    this.getA = function() {
        return that.a;
    }
}

var SecondClass = function(b) {
    this.prototype = new MyClass(b);
    this.getB = function() {
        return 6;
    }
}

var a = new SecondClass(2);
console.log(a.getA());

出力は、 getA() というメソッドがないことを示しています

SecondClass のコンストラクター内で this.prototype = new MyClass() を実行すると、MyClass からメソッドが継承されると思いましたか?

これを行うためのより良い方法があると確信していますが、prototype キーワードの動作を理解しようとしています。

4

2 に答える 2

4

「プロトタイプ」と呼ばれるプロパティは、関数であるオブジェクトでのみ興味深いものです。コンストラクターで "prototype" プロパティに値を割り当てても効果はありません (この場合)。重要なのは、コンストラクター関数自体の「プロトタイプ」プロパティです。

SecondClass.prototype = new MyClass();

か何か。コンストラクターのプロトタイプ オブジェクトは、構築されたすべてのインスタンス間で共有されるため、コンストラクターのパラメーターによってプロトタイプを変更しても意味がありません。

「SecondClass」内から「MyClass」コンストラクターを呼び出すこともできます。

function SecondClass(b) {
  MyClass.call(this, b);
  this.getB = function() {
    return 6;
  };
}

これはthis、呼び出しで構築さnew SecondClass()れた を「MyClass」コンストラクターによって装飾する効果があります。実際には継承ではありませんが、「getA」関数が得られます。

于 2013-04-23T15:57:40.747 に答える