Javascript 函数内的 this 关键字
Javascript this keyword inside functions
我正在尝试了解 Javascript
的内部结构。我对 this
关键字有些误解。
到处都说 this
关键字是对调用函数的对象的引用。
但据我所知 function
也是一个对象。
所以考虑这个例子
var car = {
brand: "Nissan",
getBrand: function(){
var closure = function(){
console.log(this.brand);
console.log(this);
};
return closure();
}
};
car.getBrand();
为什么 closure
中的 this
引用指向 global
对象而不是 getBrand
包装函数?同样,javascript 中的所有内容都是对象,所以我无法理解这种行为。
请从内部角度解释一下。
谢谢
因为 this
的值由 function
的调用方式决定。closure
的调用没有引用 context
并且全局上下文是 window
(在浏览器中)
使用 Function.prototype.call
指定 this
上下文,而函数为 invoked
var car = {
brand: "Nissan",
getBrand: function() {
var closure = function() {
console.log(this.brand);
console.log(this);
};
return closure.call(this);
}
};
car.getBrand();
我正在尝试了解 Javascript
的内部结构。我对 this
关键字有些误解。
到处都说 this
关键字是对调用函数的对象的引用。
但据我所知 function
也是一个对象。
所以考虑这个例子
var car = {
brand: "Nissan",
getBrand: function(){
var closure = function(){
console.log(this.brand);
console.log(this);
};
return closure();
}
};
car.getBrand();
为什么 closure
中的 this
引用指向 global
对象而不是 getBrand
包装函数?同样,javascript 中的所有内容都是对象,所以我无法理解这种行为。
请从内部角度解释一下。
谢谢
因为 this
的值由 function
的调用方式决定。closure
的调用没有引用 context
并且全局上下文是 window
(在浏览器中)
使用 Function.prototype.call
指定 this
上下文,而函数为 invoked
var car = {
brand: "Nissan",
getBrand: function() {
var closure = function() {
console.log(this.brand);
console.log(this);
};
return closure.call(this);
}
};
car.getBrand();