两者都可能存在问题。
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works!" }
};
var func = obj.key2;
alert(func());
当func
不是作为obj
的一个方法被调用时,this
可能会引用其他内容(在这里是全局对象"window
")。
var obj = {
key1: "it",
key2: function(){ return obj.key1 + " works!" }
};
var newref = obj;
obj = { key1: "something else"; };
alert(newref.key2());
在这里,我们从另一个引用中访问对象,尽管函数中的obj
现在可能指向其他对象。
因此,您将不得不选择哪种情况更有可能。如果您真的想使其安全,请防止交换obj
:
const obj = {
key1: "it",
key2: function(){ return obj.key1 + " works always!" }
};
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);