为什么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
答案 0 :(得分:4)
因为在函数内部,this
等于全局对象,除非:
new
创建一个对象,在这种情况下,构造函数this
内部绑定到正在创建的实例,或者obj.func()
,在这种情况下,this
将始终设置为obj
或this
已使用call
,apply
或bind
规范未指定全局对象的值,但对于在浏览器中运行的JS,它是window
对象。