Rob*_*die 9 javascript java this ecmascript-6
我知道ES6解决了thisES5中关键字存在的许多问题,例如箭头函数和类.
我的问题涉及this在ES6类的上下文中的使用以及为什么必须明确地编写它.我最初是一名Java开发人员,我来自一个以下几行代码非常自然的世界.
class Person {
private String myName;
public Person() {
myName = "Heisenberg";
}
public void sayMyName() {
System.out.println("My name is " + myName);
}
}
Run Code Online (Sandbox Code Playgroud)
编译器将始终引用该字段的值myName,除非它具有myName在方法范围内定义的名称的局部变量.
但是,一旦我们将此代码转换为ES6:
class Person {
constructor() {
this.myName = "Heisenberg";
}
sayMyName() {
console.log(`My name is ${myName}`);
}
}
Run Code Online (Sandbox Code Playgroud)
这将无法正常工作,它会抛出一个Uncaught ReferenceError: myName is not defined.解决这个问题的唯一方法是抛出一个明确的this引用:
console.log(`My name is ${this.myName}`)
Run Code Online (Sandbox Code Playgroud)
我理解this在构造函数中需要,因为ES6类不允许在构造函数之外定义你的字段,但我不明白为什么Javascript引擎不能(或不会,因为标准)做与Java编译器一样可以sayMyName
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |