私は正しいかどうか分かりません。アクセッサ・ディスクリプタ:実際に 'get'と 'set'を使用するには?
この例では、MDN(Mozillaの開発者ネットワーク)からまっすぐです:
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
何が起こることはある - それが行われていないbValueという名前のグローバル変数を作成します。私は、この例では使用方法を示しているだけなので、グローバル変数を作成しても問題ないことを理解しています。しかし、私は、アプリケーションでこれを使用するつもりならば、私はthis
キーワード追加することによって、少しそれを変更します:今
Object.defineProperty(o, "b", {get : function(){ return this.bValue; },
set : function(newValue){ this.bValue = newValue; },
enumerable : true,
configurable : true});
を、オブジェクトo
は、プロパティb
を持つことになり、同時に、それはまた、意志別の特性を持っているbValue
。彼はまだbValueに直接アクセスできますが、ユーザ(プログラマ)は「b」にのみ公開され、「bValue」には公開されません。
私は、プロパティb
とプロパティbValue
は常に同じではないかもしれないが、ゲッターとセッターは私たちがb
に値を割り当てる前にbValueを事前処理することができますので、b
がbValue
の値に依存することを理解しています。
主な質問は、正しくなっていますか?または私はここに何かを逃していますか?
ああを参照することができます...おかげでたくさん。それも速かったです。再度、感謝します。 – Golmaal
+1:すばらしい答え。私は閉鎖がこれを行う唯一の方法であるかどうか疑問に思っていました - John Resigが[Object.defineProperty()メソッドの例]で使っているようです(http://ejohn.org/blog/ecmascript- 5つのオブジェクトとプロパティ/)。 –
@Chris Francis:少しお寄せください。プライベート変数は、JavaScriptのクロージャとほぼ同じです。 – pimvdb