您好,我遇到了一个我不明白的情况
这是代码
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。
在第二种情况下,this 正确设置为 oldcar。
我不明白如何使用 oldcar.accelerate 而不是 function(){ oldcar.accelerate(); 调用 test() } 做出这样的改变。
有人可以解释一下这种行为吗?谢谢!
最佳答案
因为当您将方法作为回调传递时,您仅传递该方法,而不是它所属的对象。
当在没有任何给定范围的情况下使用this
时,它默认为window
(或最近的周围范围)。
正确的方法是传递整个对象,或者匿名函数可以访问整个对象..
function test(cb){
cb();
}
test(function(){ oldcar.accelerate() });
关于javascript - 为什么会出现 "this"行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41572493/