我在Javascript中有这个类:
return function (settings) {
var items = [],
formHelper = new FormHelper(items),
that = this;
this.currentItem;
this.initialize = function () {
settings.listFn().then(function (response) {
angular.copy(response, items);
if (response.length > 0) {
that.setCurrentItem(response[0]);
}
});
}
}
在initialize
方法中,我使用了一个承诺。当这个承诺完成后,执行匿名函数。在函数中,您可以看到that
的使用,它在第4行声明。当我使用this
关键字而不是that
时,this
指向window
},而that
指向对象。
我想知道为什么会这样。有人可以解释这是如何工作的?为什么会这样?
答案 0 :(得分:1)
this
的值取决于函数如何调用,而不是定义的方式或位置。
由于您将函数传递给某些第三方代码(.then
),您必须知道调用该函数的你,而不是第三方代码,并且您将无法控制如何调用该函数
在某些时候,回调最有可能以调用大多数函数的方式调用,简单地称为
someFunction()
在这种情况下,this
指的是全局对象在浏览器中恰好是window
(this
是undefined
是严格的模式)。
答案 1 :(得分:0)
传递给promise的回调被异步调用。在这种情况下,this
引用默认上下文,例如浏览器中的全局window
,以及node.js中的module
。
如果要阻止此操作,请使用.bind()
根据自己的喜好设置功能的上下文。 (注意:如果没有填充,{IE(1)}在IE9之前不可用
.bind()