[英]In a JavaScript object literal, should i refer to 'this' or the variable name?
我在使用this
对象字面量中遇到问题,但是当更改为对象变量本身的名称时,我的问题就解决了。
使用此功能时,出现“ myFunction”不是函数错误。
我应该这样做吗:
var app = {
init: function() {
this.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
或这个?
var app = {
init: function() {
app.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
正确的方法是什么?
这个特定的示例是我的问题的非常简化的版本,可能不会重现相同的问题,但是它与我遵循的一般模式相同,其中函数将使用this
相互调用。
谢谢,迈克尔。
正确的方法是什么?
两者都是正确的,具体取决于您要实现的目标。
如果您只打算使用这些方法之一,而又不想将这些方法复制到任何其他对象(可以在JavaScript中完成),那么使用app
可能更有意义。
我的猜测是,使用this
时遇到的问题是您做了这样的事情:
somethingThatAcceptsACallback(app.init);
要么
someElement.onclick = app.init;
...并且在调用init
时,无法调用myFunction
。 这是因为在JavaScript(现在),一路this
设置主要取决于函数是如何调用 ,而不是其中定义的功能。 在以上两种情况下,尽管对该函数的引用都被另一个代码引用,但是当另一个代码调用它时,它并没有做任何事情this
设置为app
。
您可以使用ES5的Function#bind
(可以在IE8及更高版本上填充)来创建函数,这些函数在被调用时以正确的this
值调用原始函数:
somethingThatAcceptsACallback(app.init.bind(app));
要么
someElement.onclick = app.init.bind(app);
但是,如果app
是一次性的,则只需在您的函数中使用app
就可以了。
关于this
更多信息(在我的博客上) :
在您的第一个代码中, 此引用与应用程序引用相同。 我认为我可以建议
var app = {
init: function() {
app.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
这段代码可以更好地理解。
在javascript中, this
变化取决于函数的调用方式。 这个问题通常是通过创建一个命名的变量得到解决, self
其被指派值this
的阶段,当你知道的肯定值this
var app = {
self: this,
init: function() {
self.myFunction();
},
myFunction: function() {
return "Hello world!";
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.