下一个功能有什么区别
module.exports = utils.Backbone.View.extend({
handler: () => {
console.log(this);
}
});
和
module.exports = utils.Backbone.View.extend({
handler() {
console.log(this);
}
});
为什么在第一种情况下this === window
?
答案 0 :(得分:1)
由于箭头函数不会创建自己的上下文,因此this
具有封闭上下文的原始值。
在您的情况下,封闭上下文是全局上下文,因此箭头函数中的this
为window
。
const obj = {
handler: () => {
// `this` points to the context outside of this function,
// which is the global context so `this === window`
}
}
另一方面,常规函数的上下文是动态的,当这样的函数被定义为对象的方法时,this
指向方法的拥有对象。
const obj = {
handler() {
// `this` points to `obj` as its context, `this === obj`
}
}
以上语法使用ES6 method shorthand。它在功能上等同于:
const obj = {
handler: function handler() {
// `this` points to `obj` as its context, `this === obj`
}
}