どちらも問題になる可能性があります。
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works!" }
};
var func = obj.key2;
alert(func()); // error
func
がobj
の方法として呼び出されていない場合は、this
は(ここでは:グローバルオブジェクト「window
」)何か他のものを参照することができます。ここで
var obj = {
key1: "it",
key2: function(){ return obj.key1 + " works!" }
};
var newref = obj;
obj = { key1: "something else"; };
alert(newref.key2()); // "something else works"
我々は、関数内のobj
は今、いくつかの他のオブジェクトを指すかもしれませんが、別の参照からのオブジェクトにアクセスします。
したがって、どのケースが可能性が高いかを選択する必要があります。あなたが本当にそれを安全にしたい場合は、obj
がスコープされており、変更することはできません閉鎖使用することができます。
var obj = (function(){
var local = {
key1: "it",
key2: function(){ return local.key1 + " works always!" }
};
return local;
})();
をしたり、オブジェクトへのbind()
機能:
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);