tec*_*dog 0 javascript class object-literal shorthand
有没有一种简便的方法可以在 javascript 中向类的实例添加属性?
编辑:重复的答案是关于向对象而不是类添加属性。我试图让用户轻松添加大约 10-20 个属性。我还试图确保他们无法添加自己的属性,而只能向预定义的属性添加值。我不知道该怎么做。
我有一个 javascript“类”:
function Car(){
this.make="";
this.model="";
//...
}
Run Code Online (Sandbox Code Playgroud)
要创建实例并添加属性,我将使用:
var mycar = new Car();
mycar.make="honda";
mycar.model="civic";
//...
Run Code Online (Sandbox Code Playgroud)
有没有一种快捷方式来创建实例并添加属性,这样我就不必键入“mycar”。每一次?
如果你的构造函数没有做任何重要的事情,你可以使用Object.create():
function Car() {
//...
}
console.log(
Object.create(
Car.prototype,
Object.getOwnPropertyDescriptors(
{ make: 'honda', model: 'civic' }
)
)
);Run Code Online (Sandbox Code Playgroud)
我不会确切地称其为“简写”,但它是一个单独的语句,并且Car()如果构造函数的主体是多余的,它会省略调用。
我个人建议Object.assign()在您的体内使用 constructor :
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' })
);Run Code Online (Sandbox Code Playgroud)
或者ES6:
class Car {
constructor (props = {}) {
Object.assign(this, props);
}
}
console.log(
new Car({ make: 'honda', model: 'civic' })
);Run Code Online (Sandbox Code Playgroud)