さて、私は1つのシークレットと1つのメソッドを持つこのコンストラクタを持っています:
function Keeper(get) {
var secretPower = 'wisdom';
this.get = get ? get : function () {
return 'Its secret power is: ' + secretPower;
}
// now this is privileged method only in case that there are no arguments?
}
ここで、2 つのインスタンスを作成します。1 つには特権メソッドがあります...
var yourKeeper = new Keeper();
yourKeeper.get(); // "Its secret power is: wisdom"
…が、もう一つは違います。それはその周りのコンテキストに触れることができますが、コンストラクターのプライベートには触れません...
var myKeeper = new Keeper(function() {
return 'Its secret power is: ' + secretPower;
});
myKeeper.get(); // ReferenceError: secretPower is not defined
...また、これは私が望むようには機能しません:
myKeeper.get = function() {
return 'Its secret power is: ' + secretPower;
}
myKeeper.get(); // ReferenceError: secretPower is not defined
もちろんsecretPower
、これらの場合はグローバル変数であるため、機能しません。
var secretPower = 'none';
myKeeper.get(); // "Its secret power is: none"
では、コンストラクターの外で特権メソッドを定義することは可能ですか? どのように?
evalでそれを行うことはできますか?(わかってる... 悪だ... 興味があるだけ)