どちらも問題になる可能性があります。
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
交換を防ぎます。
// ES6 - use `const`:
const obj = {
key1: "it",
key2: function(){ return obj.key1 + " works always!" }
};
// ES5: use a closure where the `obj` is stored in a local-scoped variable:
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);