2011-10-21 5 views
4

iはサブクラスのインスタンスを作成した場合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; 

さて、オブジェクトがプロパティを初期化しません、次のJavaScriptスニペットを考えてみましょかかる場合、スーパークラスを初期化するためにどのように「」と "バツ"。

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

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

+0

[Javascriptでコンストラクタ関数から継承するコンストラクタ関数を取得するには?](http://stackoverflow.com/questions/2263353/how-to-get-a-constructor-function-to- – outis

答えて

4

まず、そのコードにはいくつかの誤りがあります。

これにより、SuperClassの姉妹が作成されます。あなたがこれを実行する必要はありません

IntermediateClass.prototype = SuperClass.prototype; 

constructorはあなたのために処理されます。言っ

SubClass.prototype.constructor = SubClass; 

は、JavaScript は、クラスを持っていません。継承はオブジェクトベースです。あなたがしようとしていることをすることはできません。

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

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

+0

この投稿http://www.3site.eu/doc/#intermediateは、IntermediateClassを使用する理由を説明しています。 – Deepan

関連する問題