tec*_*dog 2 javascript properties class immutability
这个问题专门用于防止将不必要的属性添加到javascript“类”中。我有一堂课叫做动物。
function Animal(){
this.name="";
this.type="";
//20 other properties
}
Run Code Online (Sandbox Code Playgroud)
用户创建自己的动物并添加20个属性的最简单方法是什么。我还想防止用户意外添加错误的属性。
我目前的方法:
var myAnimal= new Animal();
myAnimal.name="fluffy";
myAnimal.type="cat";
myAnimal.typo="cat";
Run Code Online (Sandbox Code Playgroud)
//添加20个以上的属性将需要再输入myAnimal 20次,而且如果用户输入错误,则会将其添加为新属性。
我希望会有这样的事情:
myAnimal=new Animal{
name:"fluffy",
type:"cat";
typo:"cat" //would throw an error
}
Run Code Online (Sandbox Code Playgroud)
我已经研究了Object.freeze Object.seal,Object.preventExtensions,但不确定它们如何应用于类。
您可以Object.seal(this)
在构造函数的末尾防止添加新属性:
function Animal() {
this.name = "";
this.type = "";
// 20 other properties
Object.seal(this);
}
Run Code Online (Sandbox Code Playgroud)
您可以在构造函数中使用具有初始值的对象:
function Animal(initial) {
this.name = "";
this.type = "";
// 20 other properties
Object.seal(this);
Object.assign(this, initial);
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
myAnimal = new Animal({
name: "fluffy",
type: "cat",
typo: "cat",
});
Run Code Online (Sandbox Code Playgroud)
缺点是错误不会直接指向,typo
就像您使用多个赋值语句那样。