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

标签 javascript

为什么 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/

相关文章:

javascript - 在 for 循环中使用 setTimeout 和整数

javascript - 重置动态更改 jQuery-mobile-Slider 时出现奇怪错误

javascript - 显示动态滚动条jquery

javascript - 允许 textarea resize 缩小(不仅仅是增长)元素的原始/默认大小

javascript - 通过 MVC4 传递(并解析!)JSON 对象

javascript - 可见 ngOption 值的多个属性

javascript - 如何在页面左侧添加背景色?

javascript - 使用 mat-table 对嵌套属性进行排序

javascript - 使用 jQuery 进行同步 ajax 调用的未弃用方法是什么?

javascript - 将 HTML 元素翻译成 Jquery 但看不到它们