2012-03-20 7 views
0

私の質問の中心になるように私の例を単純化しています。私は、特権関数を持つ基本的なJavascriptクラスを持っています。私は本当にmyVarが見えないようにする必要があります。また、私は実際にbaseClassから継承したいと考えています。特権付きのJavascript継承

function baseClass() { 
    var myVar = new coolClass(); 

    this.myPrivileged = function() { 
    myVar.coolFunction(); 
    } 
} 

私が手の問題は、私はそうのように継承しようとしているということです。

function childClass() { 

} 
childClass.prototype = new baseClass(); 
childClass.prototype.reallyCoolFunction = function() {//Really cool stuff} 

しかしcoolClassは、インスタンスに依存する性質を持っているので、myVarをのインスタンスが1つだけこれまでに作成され、それが動作しません。 は、私がこれを行うので、場合:

  1. myPrivilegedを行います

    var x = new childClass(); 
    var y = new childClass(); 
    

    xとyの両方が、私は2つの選択肢があり理解できるように限りbaseClass.myVar

    の同じインスタンスを持っていますプロトタイプ関数を呼び出して公開するmyVar

  2. baseClassの内部をコピーしてchildClassに貼り付けてください(私はギャグしたいです)

私は誰かが良いアイデアを持っていることを望んでいたので、私はjavascriptの達人ではありません。事前に

おかげで、すべての

+0

[coffeeScript](http://coffeescript.org/) – Kyle

+0

@カイル:少なくともあなたのコメントには理由があるはずです。ほとんどの人は、JSにコンパイルされるいくつかの言語を使い始めるつもりはないので、デバッグすることは不可能です。 –

+0

@JuanMendes "デバッグが不可能ですか?"いいえ。それはちょうどあなたの意見です。 – Kyle

答えて

0

まず、あなただけの設定の継承に基底クラスのインスタンスを作成する必要はありません。あなたは決して使用されないcoolClassのインスタンスを作成しています。あなたのchildClassで代理コンストラクタ

function childClass() { 
    ... 
} 

function surrogateCtor() { 

} 

surrogateCtor.prototype = baseClass; 
childClass.prototype = new surogateCtor(); 

を使用して、あなたは、親のコンストラクタを呼び出す必要があり、基本クラスを使用すると、子クラスをインスタンス化するたびに初期化されることを保証します

function childClass() { 
    baseClass.call(this); 
} 

http://jsfiddle.net/mendesjuan/h2ypL/

JSの継承に関する投稿を参照してください。http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html