我知道ES6解决了ES5中this
关键字存在的许多问题,例如箭头函数和类。
我的问题涉及在ES6类的上下文中使用this
以及为什么必须明确编写它。我最初是一名Java开发人员,我来自一个以下几行代码非常自然的世界。
class Person {
private String myName;
public Person() {
myName = "Heisenberg";
}
public void sayMyName() {
System.out.println("My name is " + myName);
}
}
编译器将始终引用字段myName
的值,除非它在方法范围内定义了名为myName
的局部变量。
但是,一旦我们将此代码转换为ES6:
class Person {
constructor() {
this.myName = "Heisenberg";
}
sayMyName() {
console.log(`My name is ${myName}`);
}
}
这不会起作用,它会抛出Uncaught ReferenceError: myName is not defined
。解决此问题的唯一方法是引入明确的this
引用:
console.log(`My name is ${this.myName}`)
我理解构造函数中需要this
,因为ES6类不允许在构造函数之外定义字段,但我不明白为什么Javascript引擎可以&#39 ; t(或因为标准而获胜)与sayMyName