为什么es6类中的“this”不是隐式的?

eh57zj3b  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(346)

我知道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

csga3l58

csga3l581#

也许我不会直接回答你的问题,但我会尽量引导你思考js的方式 class 关键字。
在封面下没有什么魔力。基本上,它是一种源于javascript的原型继承之上的聚合糖。
要阅读更多关于js类的信息,请点击这里和这里。
至于你为什么要写 this 这是因为在js中它总是上下文敏感的,所以您应该引用精确的对象。阅读更多。

相关问题