5

標準として基本クラスを設定しました:

MyBase = function() {
    this.m_Stuff = 0; // etc
};
MyBase.prototype.MySuperFunction = function (arg1) {
    alert("Hello" + arg1);
};

次に MyBase を継承する別のクラスを設定します

MyChild = function () {
    MyBase.call(this);
    this.m_OtherStuff = 1; // etc
};
MyChild.prototype = new MyBase(); // innherit

しかし、それから (そして、これは私がどうすればよいかわからないビットです) MyBase の MySuperFunction をより良いものでオーバーライドしたいのですが、プロセスで基本クラス関数を呼び出します:

MyChild.prototype.MySuperFunction = function (arg1, arg2) {
    MyBase.MySuperFunction(arg1); // THIS LINE IS THE LINE I DONT KNOW HOW TO DO
    alert("You is a " + arg2 + "'th level idiot");
};

オーバーライドしたい子クラスは基本クラス関数ですが、新しく改善された定義で基本クラス関数を呼び出したいと考えています。

これは可能ですか?

4

2 に答える 2

8

これは、継承されたコンストラクターでの呼び出しに似ています。MyBase.prototype.MySuperFunction「スーパー」メソッドにはまだ(割り当てた場所で)アクセスできるので、次を使用します。

MyBase.prototype.MySuperFunction.call(this, arg1);

より動的なアプローチではObject.getPrototypeOf、プロトタイプを取得するために使用することもできますが、動的継承で機能することに注意してください。また、親を呼び出す必要があるメソッドが多数ある場合は、 Child プロトタイプ オブジェクトのすべての関数にアクセスできる変数MyBase.prototypeとしてエイリアスを設定すると便利です (例については、この回答を参照してください)。super

于 2013-06-06T13:18:15.710 に答える
2

以下を適用してください:-

MyBase.prototype.MySuperFunction.call(this, arg1);
于 2013-06-06T13:17:30.443 に答える