javascript - 为什么会出现 "this"行为?

标签 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。

在第二种情况下,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/

相关文章:

javascript - 使用 facebook-javascript-sdk 更改应用程序请求通知文本

c++ - 使用 "this"指针和不使用它有区别吗?

javascript - 用于 HTML 元素的函数中的“this”关键字

javascript - 如何在参加在线考试时完全禁用浏览器的后退按钮?

javascript - NodeJs 中 .env 的换行符后的字符串不可读

javascript - datatables.search 函数修改后的奇怪行为

javascript - 在 polymer 上的 on-* 事件中发送数据

javascript,在匿名对象创建期间访问其他成员?

javascript - 多个textarea的唯一计数值

Javascript::this.value 在 for 循环内无法正常工作?