Javascript / NodeJS: вызов методов объекта внутри одного и того же объекта: почему «это». обязательный? - PullRequest
0 голосов
/ 10 сентября 2018

Я новичок в Node / Javascript (ES6). Смотрите пример здесь ниже:

class MyClass {

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

    runMyTest() {
          this.myTest()
        }

}

если я опускаю this. в строке this.myTest(), я получаю ошибку времени выполнения:

      myTest()
      ^

ReferenceError: myTest не определен

Мне кажется обязательным вызывать методы, объявленные в одном и том же объекте (в данном случае это объект класса) вызывающей стороны, необходимо this.method ()

Это верно?

Аналогичным образом, я вижу, что родительский метод (для подкласса объекта) требует super.parentMethod ().

Исходя из Ruby / других ОО-языков, которые кажутся мне странными.

Почему причина обязательного this. / super. в JS?


UPDATE:

Небольшой обходной путь, который я нашел (чтобы избежать повторения этого метода):

class MyClass {

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

    runMyTestManyTimes() {
          const mytest = this.mytest

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

        }

}

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Это потому, что в отличие от 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!');
}
0 голосов
/ 10 сентября 2018

Поскольку this относится к этому экземпляру MyClass (с методами класса в прототипе) и без него, ваш метод не видит функцию, потому что она не выглядит в правильном месте , Он будет использовать все, что находится в его области видимости, т.е. если функция myTest() будет объявлена ​​вне класса глобально.

enter image description here

...