你好,我被困在一个我不明白的情况下
这是代码
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(); }有所作为。
有人可以解释这种行为吗?谢谢 !
最佳答案
因为当您将方法作为回调传递时,您仅传递了方法,而不传递了它所属的对象。
在没有任何给定范围的情况下使用this
时,它默认为window
(或最接近的周围范围)。
正确的方法是传递整个对象,或者匿名函数有权访问整个对象。
function test(cb){
cb();
}
test(function(){ oldcar.accelerate() });