我知道es6解决了很多与 this
es5中的关键字,如箭头函数和类。
我的问题涉及到 this
在es6类的上下文中,以及为什么必须显式编写它。我最初是一名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引擎不能(或者不会,因为标准)像java编译器在 sayMyName
1条答案
按热度按时间csga3l581#
也许我不会直接回答你的问题,但我会尽量引导你思考js的方式
class
关键字。在封面下没有什么魔力。基本上,它是一种源于javascript的原型继承之上的聚合糖。
要阅读更多关于js类的信息,请点击这里和这里。
至于你为什么要写
this
这是因为在js中它总是上下文敏感的,所以您应该引用精确的对象。阅读更多。