Как переопределить метод функции класса arrow - PullRequest
3 голосов
/ 14 марта 2019

Я знаю, что это что-то простое, но я не могу найти ответ на свой вопрос.

Многие ссылки на то, что если у вас одинаковое имя функции, при вызове функции будет вызываться только последний экземпляр функции (переопределение).

Я не могу этого сделать, если функция является функцией стрелки.

Нормальное поведение функции:

class A {
  constructor() {
    this.something();
  }

  something() {
    console.log('I am A');
  }
}

class B extends A {
  something() {
    console.log('I am B');
  }
}

let b = new B();

Это переопределяет функцию something() в class A, но я не могу переопределить функцию something(), если она имеет формат функции стрелки.

class A {
  constructor() {
    this.something();
  }

  something = () => {
    console.log('I am A');
  }
}

class B extends A {
  something = () => {
    console.log('I am B');
  }
}

let b = new B();

Почему выходные данные отличаются? Как правильно переопределить функцию стрелки в родительском классе?

1 Ответ

0 голосов
/ 14 марта 2019
class A {
  constructor() {
    this.something();
  }

  something = () => {
    console.log('I am A');
  }
}

class B extends A {
constructor() {
    super();
    this.something();
  }
  something = () => {
    console.log('I am B');
  }
}

let b = new B();

Это работает для меня.Происходит то, что вы вызываете this.something() внутри класса A, поэтому он будет использовать свой собственный метод в классе A. Если вы вызовете его в классе B, он будет использовать свой собственный конструктор, который переопределяет конструктор класса A.Вы также можете позвонить в класс A в классе B, используя super.something();

...