javascript class 实例对象字面量

javascript class instance object literal

是否有 shorthand 方法可以将属性添加到 javascript 中的 class 的实例?

编辑:重复的答案是关于向对象添加属性而不是 class。我试图让用户轻松添加大约 10-20 个属性。我还试图确保他们不能添加自己的属性,而只能向预定义的属性添加值。我不知道该怎么做。

我有一个 javascript "class":

function Car(){
this.make="";
this.model="";
//...
}

要创建一个实例并添加我将使用的属性:

var mycar = new Car();
    mycar.make="honda";
    mycar.model="civic";
    //...

是否有 shorthand 方法来创建实例并添加属性,这样我就不必每次都键入 "mycar."?

你应该使用构造函数的参数:

function Car(make, model) {
  this.make = make;
  this.model = model;
}
var mycar = new Car("honda", "civic");

您可以使用Object.assign函数。

function Car() {
  this.make = "";
  this.model = "";
}

var mycar = new Car();
Object.assign(mycar, { make: "honda", model: "civic" });

console.log(mycar);

如果你的构造函数没有做任何重要的事情,你可以使用 Object.create():

function Car() {
  //...
}

console.log(
  Object.create(
    Car.prototype,
    Object.getOwnPropertyDescriptors(
      { make: 'honda', model: 'civic' }
    )
  )
);

我不会确切地称它为 "shorthand",但它 一个单独的语句,如果构造函数的主体是多余的,它会省略调用 Car() .

我个人建议在您的 constructor:

正文中使用 Object.assign()

function Car(props) {
  /* to formally mimic behavior of default parameters specification */
  // props = arguments.length < 1 || props === undefined ? {} : props;
  /* commonly used "good-enough" ES5 equivalent */
  props = props || {};
  Object.assign(this, props);
}

console.log(
  new Car({ make: 'honda', model: 'civic' })
);

或 ES6:

class Car {
  constructor (props = {}) {
    Object.assign(this, props);
  }
}

console.log(
  new Car({ make: 'honda', model: 'civic' })
);