为什么 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
最佳答案
因为在函数内部,this
等于全局对象除非:
- 您正在使用
new
创建一个对象,在这种情况下,在构造函数中this
绑定(bind)到正在创建的实例,或者 - 调用的形式为
obj.func()
,在这种情况下,this
将始终设置为obj
,或者< this
已使用call
、apply
或bind
明确绑定(bind)到某个值
全局对象的值在规范中没有指定,但是对于在浏览器中运行的 JS,它是 window
对象。
关于javascript - 为什么函数上下文在实例化时会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969871/