【发布时间】:2023-03-31 02:09:01
【问题描述】:
我是 Node/Javascript (ES6) 的新手。 请参阅下面的示例:
class MyClass {
myTest() {
console.log('it works')
}
runMyTest() {
this.myTest()
}
}
如果我在 this.myTest() 行中省略了 this.,我会收到运行时错误:
myTest() ^ReferenceError: myTest 未定义
在我看来,调用调用者的同一对象(在这种情况下为类对象)中声明的方法是强制性的,需要 this.method()
对吗?
以类似的方式,我看到(子类对象的)父方法需要 super.parentMethod()。
来自 Ruby/其他对我来说听起来很奇怪的 OO 语言。
为什么在 JS 中强制 this. / super. 的原因?
更新:
我发现的小解决方法(以避免 this.method 重复):
class MyClass {
myTest() {
console.log('it works')
}
runMyTestManyTimes() {
const mytest = this.mytest
myTest()
...
myTest()
...
myTest()
...
}
}
【问题讨论】:
-
最直接的答案是因为这正是语言规范所要求的。
this是调用上下文,而省略this只会从作用域中查找标识符,如果它在作用域内,则在没有调用上下文的情况下调用函数,在这种情况下它不是。 -
我不了解 Ruby(除了用于编辑的基础知识,例如 Vagrantfiles),但 Java 和 Python 都以这种方式工作。我以为 Ruby 用
@代替this。它真的可以让你调用没有引用的方法吗?
标签: javascript node.js function oop scope