解释了Javascript中'this'的值

时间:2014-01-22 08:44:54

标签: javascript this

我在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指向对象。

我想知道为什么会这样。有人可以解释这是如何工作的?为什么会这样?

2 个答案:

答案 0 :(得分:1)

this的值取决于函数如何调用,而不是定义的方式或位置。

由于您将函数传递给某些第三方代码(.then),您必须知道调用该函数的,而不是第三方代码,并且您将无法控制如何调用该函数 在某些时候,回调最有可能以调用大多数函数的方式调用,简单地称为

someFunction()

在这种情况下,this指的是全局对象在浏览器中恰好是windowthisundefined是严格的模式)。

More information on MDN

答案 1 :(得分:0)

传递给promise的回调被异步调用。在这种情况下,this引用默认上下文,例如浏览器中的全局window,以及node.js中的module

如果要阻止此操作,请使用.bind()根据自己的喜好设置功能的上下文。 (注意:如果没有填充,{IE(1)}在IE9之前不可用

.bind()