在函数中引用一个对象文字是非常有道理的问题吗?似乎工作正常,但我想确保没有其他的影响.
以下是我正在谈论的例子:
代替:
var obj = { key1: "it",key2: function(){return this.key1 + " works!"} }; alert(obj.key2());
使用:
var obj = { key1: "it",key2: function(){return obj.key1 + " works!"} }; alert(obj.key2());
解决方法
两者都可能有问题.
var obj = { key1: "it",key2: function(){ return this.key1 + " works!" } }; var func = obj.key2; alert(func()); // error
当func不被称为obj的方法时,this
可以引用别的东西(在这里:全局对象“窗口”).
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; })();
var obj = { key1: "it",key2: function(){ return this.key1 + " works always!" } } obj.key2 = obj.key2.bind(obj);