gpt4 book ai didi

javascript - 为什么函数上下文在实例化时会发生变化?

转载 作者:行者123 更新时间:2023-11-29 10:16:08 24 4
gpt4 key购买 nike

为什么 foo() 中的上下文在通过实例化调用时会有所不同?

此外,this 是否可以在对象范围内指向除容器对象(如 window)之外的其他对象(下面的 bar 示例) ?

function foo(){
console.log(this === window, this);
}

var bar = {
getBar: function(){
console.log(this === bar);
}
};

foo();
var f = new foo();
bar.getBar();

// Output:
// true
// false
// true

http://jsfiddle.net/RUaEA/1/

最佳答案

因为在函数内部,this 等于全局对象除非:

  • 您正在使用 new 创建一个对象,在这种情况下,在构造函数中 this 绑定(bind)到正在创建的实例,或者
  • 调用的形式为obj.func(),在这种情况下,this 将始终设置为obj,或者<
  • this 已使用 callapplybind
  • 明确绑定(bind)到某个值

全局对象的值在规范中没有指定,但是对于在浏览器中运行的 JS,它是 window 对象。

关于javascript - 为什么函数上下文在实例化时会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com