为什么这个“这个”行为?

时间:2017-01-10 15:33:43

标签: javascript this

你好我被困在一个我没有得到的案件

这是代码

function car(speed) {
    this.speed = speed; 
    this.accelerate = function() {
        this.speed += 1;
    }
}

var oldcar = new car(1);

function test(cb){
  cb();
}

test(oldcar.accelerate);

console.log(oldcar.speed);
// 1

test(function(){ oldcar.accelerate(); });

console.log(oldcar.speed);
// 2

在第一个函数调用test()中,我发现oldcar.accelerate方法中的 this 设置为window。

在第二种情况下,已正确设置为oldcar。

我不明白如何使用oldcar.accelerate而不是function(){oldcar.accelerate();调用test();做出这样的改变。

有人可以解释一下这种行为吗?谢谢!

1 个答案:

答案 0 :(得分:1)

因为当您将方法作为回调传递时,您只传递方法,而不是它所属的对象。

如果在没有任何给定范围的情况下使用this,则默认为window(或最接近的范围)。

正确的方法是传递整个对象,或者匿名函数可以访问整个对象..

function test(cb){
  cb();
}

test(function(){ oldcar.accelerate() });