函数错误中的Javascript方法显示“不是函数”

时间:2018-11-29 08:45:24

标签: javascript scope bind ecmascript-5

我一直在上课学习基本的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 :(得分:1)

您当前仅将addPassenger函数声明为函数内部的常量。

要“使函数成为类的一部分”,请使用 this

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

答案 1 :(得分:0)

在使用const or function语法在vehicle函数内部创建函数时,该函数不属于实例变量,而是构造函数的私有函数。为了从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);

答案 2 :(得分:0)

您需要将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);