Jas*_*son 15 javascript object
在一个函数中引用一个对象文字是否有问题?它似乎工作得很好,但我想确保没有其他含义.
这是我正在谈论的一个例子:
代替:
var obj = {
key1: "it",
key2: function(){return this.key1 + " works!"}
};
alert(obj.key2());
Run Code Online (Sandbox Code Playgroud)
使用:
var obj = {
key1: "it",
key2: function(){return obj.key1 + " works!"}
};
alert(obj.key2());
Run Code Online (Sandbox Code Playgroud)
Ber*_*rgi 19
两者都有问题.
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works!" }
};
var func = obj.key2;
alert(func()); // error
Run Code Online (Sandbox Code Playgroud)
当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"
Run Code Online (Sandbox Code Playgroud)
在这里,我们从另一个引用访问对象,虽然obj函数中的函数现在可能指向其他对象.
所以你必须选择哪种情况更有可能.如果你真的想让它变得安全,你可以使用一个封闭的地方obj,不能改变:
var obj = (function(){
var local = {
key1: "it",
key2: function(){ return local.key1 + " works always!" }
};
return local;
})();
Run Code Online (Sandbox Code Playgroud)
或者你bind()对象的功能:
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3185 次 |
| 最近记录: |