有没有办法在javascript的类中定义数组?

时间:2019-08-27 20:31:48

标签: javascript

我需要在一个类中创建一个数组和一个add函数。 add函数将在数组中推送一些对象。有一种使用原型的方法,但是是否可以通过其他方法实现,最好在类内部定义数组(我猜这是不可能的)?

//This works
class Parser {
    addOption(name, isReq, type, cantBeUsedWith) {
        this.options.push({
            name: name,
            isReq: isReq,
            type: type, 
            cantBeUsedWith: cantBeUsedWith
        });
    }
}

Parser.prototype.options = [];

//Need to do something like
class Parser {
    var options = [];
    addOption(name, isReq, type, cantBeUsedWith) {
        this.options.push({
            name: name,
            isReq: isReq,
            type: type, 
            cantBeUsedWith: cantBeUsedWith
        });
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在类的构造函数中创建一个数组:

class Parser {
  constructor() {
    this.options = [];
  }
  addOption(name, isReq, type, cantBeUsedWith) {
    this.options.push({ 
      name: name, 
      isReq: isReq, 
      type: type, 
      cantBeUsedWith: cantBeUsedWith 
    });
  }
}

顺便说一句,您设置Parser.prototype.options的版本将为该类创建一个数组,而不是为每个实例创建一个数组。这可能不是您想要的。进行this.options.push会使该单个数组发生变异,因此该类的每​​个实例都会看到该变异。

class Example {
  addOption() {
    this.options.push('hello world');
  }
}

Example.prototype.options = [];

const a = new Example();
const b = new Example();
a.addOption();

console.log(b.options); // I never touched b, and yet its options changed

答案 1 :(得分:0)

如果要查找类级别的(而不是对象级别的)属性,当前没有此类选项。有proposal-static-class-features,通过添加公共和私有静态方法来解决此问题。

如果要添加对象级别的属性,只需在构造器中将其初始化:

table()