我在使用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
(在我的博客上):
- <
- 神话方法/em>
- 你一定要记住
this
在你的第一个代码这个引用和app引用相同。在我看来,我可以建议
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!";
}
};