Как предотвратить вызов конструктора родительского класса при использовании дочернего класса в javascript - PullRequest
0 голосов
/ 21 июня 2020

Если у меня есть два класса в javascript один наследует другой. Когда запускается конструктор базового класса, также вызывается конструктор родительского класса.

    class Parent{
        constructor(){
            alert("Parent constructor Called");
        }
    }

    var parent = new Parent();
    
    class Child extends Parent{
        constructor(){
            super();
            alert("Child constructor Called");
        }
    }
   
    var child = new Child();

Результаты: -

var parent = new Parent();

Вывод ->

  1. Выдается предупреждение -> «Родительский конструктор Вызывается ".

    var child = new Child ();

Вывод ->

  1. Сделано предупреждение ->" Родительский конструктор Вызывается «
  2. Сделано предупреждение ->« Вызывается дочерний конструктор »

Как предотвратить вызов конструктора родительского класса при создании объекта дочернего класса. Я столкнулся с проблемой, что родительский конструктор вызывает events метод родительского класса, который вызывает метод с некоторым ajax запросом внутри него. Я хочу использовать тот же метод вызова ajax в базовом классе, и я вызываю этот метод в методе events дочернего класса, и этот метод events вызывает метод, содержащий ajax запрос, но поскольку родительский конструктор вызывает эти методы там, где это необходимо, метод ajax вызывается дважды, снова выбирая одни и те же данные. Также многие имена переменных в обоих классах совпадают.

1 Ответ

0 голосов
/ 21 июня 2020

По замыслу каждый унаследованный класс всегда сначала запускает родительский конструктор.

Вам нужно изменить свою реализацию, чтобы можно было переопределить поведение.

class Parent{
      alert() {
          alert("Parent constructor Called");
      }

      constructor() {
          this.alert();        
      }
  }

  var parent = new Parent();

  class Child extends Parent{
      alert() {
          alert("Child constructor Called");
      }    
  }

  var child = new Child();
...