鉴于此课程
class Car {
foo() {
console.log(this)
}
bar = () => {
console.log(this)
}
baz = function() {
console.log(this)
}
}
let car = new Car();
let a = car.foo;
let b = car.bar;
let c = car.baz;
a() // undefined
b() // car object
c() // undefined
属性如何指定箭头函数在声明时绑定this
的值?
我认为箭头函数使用执行上下文的this
值,而不是声明。
答案 0 :(得分:2)
这不是ES6代码。您正在使用类字段提案。类字段基本上只是用于编写通常进入构造函数的代码的语法糖。
ES6等价物将是
class Car {
foo() {
console.log(this)
}
constructor() {
this.bar = () => {
console.log(this)
};
this.baz = function() {
console.log(this)
};
}
}
我认为箭头函数使用执行上下文的
this
值,而不是声明。
我不太清楚你的意思,但箭头函数中的this
值可以解释,就像任何其他变量一样。并且在定义箭头函数时已经设置了封闭执行上下文的this
值。
鉴于类字段如何工作,我们现在可以看到为什么arrow函数具有对实例的引用:在构造函数this
内部引用实例,箭头函数以词法方式解析this
。
答案 1 :(得分:0)
在箭头函数之前,每个新函数都定义了它自己的这个值(在构造函数的情况下是一个新对象,在严格模式函数调用中是未定义的,如果该函数被调用为&#34,则为基础对象;对象方法&# 34;等)。事实证明,面向对象的编程风格并不理想。