Как я могу получить доступ к методу родительского объекта в JavaScript? - PullRequest
0 голосов
/ 17 января 2019

скажем, у меня была некоторая иерархия классов, как показано ниже. Есть ли у класса движка доступ к методу someMethod () родителя?

class vehicle{
  constructor(){
    this.eng = new engine();
    ...
  }

  someMethod(a){
    ...
  }
  ...
}



class engine{
  ...
}

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Есть несколько способов сделать то, что вы хотите, и вы должны спросить себя: концептуально, как это должно работать?

Вы должны переосмыслить всю ситуацию.Суть в том, почему двигатель заботится о том, в каком автомобиле он находится?Автомобиль заботится только о том, что делает двигатель, а не наоборот.

Итак, скажем, у вас есть метод start на транспортном средстве.Это может выглядеть как

start() {
  this.engine.start().then(function(infofromengine) {
    console.log('engine started', infofromengine);
  }, function(errorfromengine) {
    console.log('error in engine start', errorfromengine);
  }
}

, и в вашем движке у вас будет тот метод start, который возвращает обещание и любую информацию, которую транспортное средство может знать о двигателе;

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

Если сделать еще один шаг вперед, у вас могут быть некоторые дочерние компоненты, которые должны бытьчтобы быть в курсе друг друга.Таким образом, вы могли бы «подключить их» в строительстве.Пример, придуманный из этого, может быть в конструкторе вашего транспортного средства

constructor() {
  this.checkEngineLight = new Light();
  this.engine = new Engine({checkEngineLight});
}

и в двигателе,

constructor(config) {
  let {checkEngineLight} = config;
  this.engineLight = checkEngineLight;
}

someEngineAction() {
  if (some_error_happens) this.engineLight.toggle(true, someerrorid);
}

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

Но чтобы ответить на ваш вопрос более прямо, в случае, когда «движок» обязательно должен иметь прямой доступ«транспортному средству» вы должны были бы рассказать двигателю о транспортном средстве ... точно так же, как вы сказали ему о контрольной лампочке двигателя: new Engine(this) и конструктор двигателя будет constructor(vehicle)

0 голосов
/ 17 января 2019

Есть два решения этой проблемы

Во-первых, если вы наследуете свойства родителя следующим образом:

class engine extends vehicle {
  someMethod(a) { // method name has to be the same name as parent, calling super calls vehicle's someMethod(a) method
    super(a); // vehicle.super called
  }
}

или создайте экземпляр транспортного средства и вызовите метод

class engine {
  someMethod(a) { // can be any name, as long as its using v.someMethod(a)
    const v = new vehicle();
    v.someMethod(a);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...