两者都可能有问题。
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
现在可能指向其它对象 。
因此,您必须选择哪个情况更可能。 如果您真的想要安全, 请防止 < code>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;
})();
或您 < a href=>"https:// developmenter.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind" rel="Nofollow noreferr"\\code>bind () 该对象的函数 :
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);