2009-03-16 8 views
1

私はDiazの本Pro JavaScript Design Patternsを読んできました。素晴らしい本。私は自分でプロではない。私の質問:プライベートインスタンス変数にアクセスできる静的関数を持つことができますか?私のプログラムにはたくさんのデバイスがあり、1つの出力は別の出力に接続できます。この情報は入力配列と出力配列に格納されます。私のコードは次のとおりです。Javascriptでプライベートインスタンス変数にアクセスする静的パブリックメソッド

Device.connectはデバイスの出力と入力の配列にアクセスできないため、これは機能していないようです。デバイスに秘密のメソッド(pushToOutputsなど)を追加せずにデバイスに公開する方法はありますか?

ありがとうございます! Steve。

答えて

2

ユージン・モロゾフが正しいです - あなたがそれらの関数であなたがそうであるようにそれらを作成するなら、それらの変数にアクセスすることはできません。私の通常のアプローチは、変数をthisにすることですが、それらの名前を明示的に非公開にすることは明白です。

var Device = function(newName) { 
    this._name = newName; 
    this._inputs = new Array(); 
    this._outputs = new Array(); 
    this.getName() { 
     return this._name; 
    } 
}; 
Device.connect = function(outputDevice, inputDevice) { 
    outputDevice._outputs.push(inputDevice); 
    inputDevice._inputs.push(outputDevice); 
}; 

//implementation 
var a = new Device('a'); 
var b = new Device('b'); 
Device.connect(a, b); 
1

あなたはクロージャを作成しています。特権メソッドを使用する以外は、クロージャ変数に外部からアクセスする方法はありません。

率直に言えば、私はプライベート変数の必要性、特にJavascriptコードの必要性を感じなかった。だから私は気にしないで公開してもらえますが、それは私の意見です。

関連する問題