gpt4 book ai didi

javascript - 为什么 ES6 类中的 "this"不是隐式的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:20 27 4
gpt4 key购买 nike

我知道 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的情况下

最佳答案

也许我不会直接回答你的问题,但我会尝试指导你应该如何思考 JS class 关键字。

在表面之下并没有什么神奇之处。基本上,它是自 JavaScript 诞生以来原型(prototype)继承的一种语法糖。

要阅读有关 JS 类的更多信息,请单击 herehere .

至于为什么你需要显式地写 this 是因为在 JS 中它总是上下文敏感的,所以你应该引用确切的对象。阅读more .

关于javascript - 为什么 ES6 类中的 "this"不是隐式的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41445469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com