Javascript метод в функции Ошибка с "не является функцией" - PullRequest
0 голосов
/ 29 ноября 2018

Я изучал базовую концепцию Javascript с помощью класса.Я пытаюсь это с синтаксисом ES5.

Кстати, я застрял с этой проблемой.Я определил класс с объявлением функции.И определил метод в этом классе.

const Vehicle = function() {
  this.passengers = [];
  console.log('Vehicle created');

  const addPassenger = function(p) {
    this.passengers.push(p);
  }
}

const v = new Vehicle();

v.addPassenger("Frank");
v.addPassenger("Zim");
console.log(v.passengers);

Но когда я вызываю его с его экземпляром, я получаю ошибку.Я думаю, что проблема в том, чтобы связать ... Но я понятия не имею, где и с кем мне следует связываться.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Когда вы создаете функцию внутри функции транспортного средства с использованием синтаксиса const or function, она не принадлежит переменной экземпляра и является частной для функции конструктора.Чтобы использовать его из объекта instace, вам нужно определить его для экземпляра, например

const Vehicle = function() {
  this.passengers = [];
  console.log('Vehicle created');

  this.addPassenger = function(p) {
    this.passengers.push(p);
  }
}

const v = new Vehicle();

v.addPassenger("Frank");
v.addPassenger("Zim");
console.log(v.passengers);
0 голосов
/ 29 ноября 2018

Вам нужно заменить const на this

const Vehicle = function() {
  this.passengers = [];
  console.log('Vehicle created');
  this.addPassenger = function(p) {
    this.passengers.push(p);
  }
}

const v = new Vehicle();

v.addPassenger("Frank");
v.addPassenger("Zim");
console.log(v.passengers);
0 голосов
/ 29 ноября 2018

В настоящее время вы только объявляете функцию addPassenger как константу внутри функции.

Чтобы "сделать функцию частью класса", используйте this

this.addPassenger = function(p) {
////
}
...