4

次の Javascript スニペットを検討してください。

var SuperClass = function(x){
    this.x = x;
    this.a = 5;
};

var SubClass = function(x){
}

function IntermediateClass(){};
IntermediateClass.prototype = SuperClass.prototype;
SubClass.prototype = new IntermediateClass;
SubClass.prototype.constructor = SubClass;

SubClass のインスタンスを作成すると、オブジェクトはプロパティ "a" と "x" を初期化しません。

var object = new SubClass;
//object.a == undefined
//object.x == undefined

なぜこれが起こるのかは理解できますが、サブクラスがスーパークラスコンストラクターによって行われた初期化を実行する最もクリーンな方法は何ですか?

4

1 に答える 1

4

まず第一に、そのコードにはたくさんのエラーがあります。

これにより、IntermediateClassが SuperClassの姉妹になります。

IntermediateClass.prototype = SuperClass.prototype;

これを行う必要はありませconstructorん。処理されます。

SubClass.prototype.constructor = SubClass;

とはいえ、JavaScriptにはクラスがありません。継承はオブジェクトベースです。やろうとしていることはできません。

代わりに、別の関数で初期化を抽出し、「サブクラス」から呼び出します。

より良い質問は、あなたが達成しようとしていることです。JavaScript を Java であるかのように記述しようとしています。そうではありません。

于 2011-10-21T04:10:06.323 に答える