Javascript:对象在自己的键的函数中的字面引用,而不是’this’

前端之家收集整理的这篇文章主要介绍了Javascript:对象在自己的键的函数中的字面引用,而不是’this’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
函数中引用一个对象文字是非常有道理的问题吗?似乎工作正常,但我想确保没有其他的影响.

以下是我正在谈论的例子:

代替:

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;
})();

或者你将bind()功能给对象:

var obj = {
    key1: "it",key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);
原文链接:https://www.f2er.com/js/152661.html

猜你在找的JavaScript相关文章