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