Вызовите родительскую функцию в родительском классе вместо дочернего (те же имена) javascript - PullRequest
0 голосов
/ 27 января 2020

У меня есть две функции с одинаковыми именами. Один внутри дочернего класса и один внутри родителя.

Я подумал, что если я вызову метод в родительском классе, то будет вызвана функция родителя.

Но похоже, что он не работает так, и вызывает дочерний элемент. function.

Так что мой вопрос в том, как вызвать родительскую функцию в родительском классе, если у меня есть другая с таким же именем в дочернем классе.

Я хотел бы получить 'Parent' и 'Child', но я получаю 2 раза «Дитя»

class Parent {
  constructor() {
    this.init()
  }
  init() {
    console.log('Parent');
  }
}
class Child extends Parent {
  constructor() {
    super();
    this.init()
  }
  init() {
    console.log('Child');
  }
}
new Child();

1 Ответ

0 голосов
/ 27 января 2020

this ссылается на дочерний экземпляр и наследует его метод .init, который скрывает метод .init, унаследованный от родительского. Чтобы явно сослаться на это, вы должны написать

class Parent {
  constructor() {
    Parent.prototype.init.call(this)
  }
  init() {
    console.log('Parent');
  }
}

Но это действительно плохая идея, как переопределить метод, в котором переопределенный метод не должен называться , так и в общее для вызова переопределяемых методов в конструкторе . В вашем случае просто сделайте всю свою работу внутри constructor и полностью исключите метод init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...