1

BaseClass.jsとDerivedClass.jsの2つのファイルがあります。内容は以下の通り

//---------------------BaseClass.js----------------------------

(function () {
    BaseClass= function() { };
    BaseClass.prototype.getTestVar = function() {
    return 'base test variable';
    };
})();


//----------------DerivedClass.js----------------------------

(function () {
    DerivedClass= function() { };
    DerivedClass.inherits(BaseClass);
    DerivedClass.prototype = new BaseClass();
    DerivedClass.prototype = {
        newvar : 'derived func variable ',
        getNewVar : function() { return this.newvar; }
    };
})();

私のhtmlファイル'test.html'には次のものがあります

var dc = new DerivedClass();
alert(
    'The value in newvar of derived class ' + dc.getNewVar() + 
    ' base class variable ' + dc.getTestVar()
);

dc.getTestVar()が関数ではないというJavascriptエラーが発生します。これを解決するための助けは大歓迎です。

4

2 に答える 2

2

次の数行を確認してください。

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype = {
    newvar : 'derived func variable ',
    getNewVar : function() { return this.newvar; }
};

最初にプロトタイプとして new を割り当てますBaseClassが、次の行でそのプロトタイプを新しいオブジェクトで上書きします。DerivedClass.prototype.newvarおそらく、 and を個別に割り当てる必要があります—メソッドDerivedClass.prototype.getNewVarを提供する、使用している従来の継承ライブラリと一致すると仮定します。inherits

あれは、

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype.newvar = 'derived func variable';
DerivedClass.prototype.getNewVar = function() { return this.newvar; }

それでも、これは従来の継承とプロトタイプの継承が混在しているように見えます。その古典的な継承ライブラリのドキュメントを読んで、この種のことを行うためのより一貫した方法があるかどうかを確認してください。

たとえば、Crockford の古典的な継承(キーワードからの推測inherits) を使用している場合、これはメソッドを宣言する彼の意図した方法のようです。

DerivedClass.method('getNewVar', function () { return this.newvar });

確かに、それはあなたがすでに行っていることとまったく同じですが、彼のライブラリを使用する場合は、一貫性のために彼のスタイルを使用することもできます.

于 2012-07-22T02:41:19.023 に答える
2

この時点で:

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype = {
    newvar : 'derived func variable ',
    getNewVar : function() { return this.newvar; }
};

最初にプロトタイプを に設定していBaseClassますが、新しいオブジェクトで上書きしています。代わりにこれを試してください:

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype.newvar = 'derived func variable ';
DerivedClass.prototype.getNewVar = function() { return this.newvar; };
于 2012-07-22T02:41:49.527 に答える