Javascript / NodeJS:在同一对象内调用对象方法:为什么是“ this”。强制性的吗?

时间:2018-09-10 15:47:40

标签: javascript node.js function oop scope

我是使用Node / Javascript(ES6)的新手。 请参见下面的示例:

class MyClass {

    myTest() {
          console.log('it works')
        }

    runMyTest() {
          this.myTest()
        }

}

如果我在this.行中省略了this.myTest(),则会出现运行时错误:

      myTest()
      ^
     

ReferenceError:未定义myTest

在我看来,调用在调用者的同一对象(在这种情况下为Class Object)中声明的方法是强制性的,需要this.method()

对吗?

以类似的方式,我看到(子类对象的)父方法需要super.parentMethod()。

来自Ruby /其他听起来很奇怪的OO语言。

为什么在JS中强制使用this. / super.的原因?


更新:

我发现了一个小的解决方法(以避免这种方法重复):

class MyClass {

    myTest() {
          console.log('it works')
        }

    runMyTestManyTimes() {
          const mytest = this.mytest

          myTest()
          ...
          myTest()
          ...
          myTest()
          ...

        }

}

2 个答案:

答案 0 :(得分:3)

因为 * * [0][1][2][3][4][5] ^ s now points to the original address plus two! len(s) = 2 cap(s) = 4 指向this的实例(在原型上带有类方法),并且没有它,您的方法就不会 see 该函数,因为它不是寻找正确的地方。它将使用范围内的任何内容,即,如果MyClass函数是在全局类外部声明的。

enter image description here

答案 1 :(得分:1)

这是因为与Java或C#(您很可能从中看到过这种做法)不同,JavaScript可以具有不属于该类的函数。

在这种情况下您会怎么做?

class MyClass {
  myTest() {
    console.log('it works');
  }

  runMyTest() {
    myTest(); // oops
  }
}

function myTest() {
  console.error('It does not work! Oh my god everything is on fire!');
}
相关问题