我有一个原型
class Animal() {
constructor(name, weight) {
this.name = name
this.weight = weight
}
}
和一些即将到来的对象,其中包含这些属性以及其他内容
const obj = {
name: "name",
weight: 5,
someRedundantProp: "bla"
}
我非常喜欢使用 Object.assign 进行JS映射,这通常会为我创建一个包含所有属性的对象,但是在这里我只想用必要字段填充这个新对象。 当然,我可以像
那样映射这个对象new Animal(obj.name, obj.weight)
但如果在某些时候我会介绍新的属性,我将不得不在这里更改代码,我不想要的。
有更好的方法吗?
答案 0 :(得分:1)
这应该适合你:
class Animal {
constructor(obj) {
const defaultFields = {
name: "",
weight: 0
}
Object.keys(defaultFields).forEach(key => defaultFields[key] = obj[key]);
Object.assign(this, defaultFields);
}
}
答案 1 :(得分:0)
您可以检查第一个参数是否是一个对象,然后将该对象分配给它。
但要注意,这也有一些令人讨厌的副作用。
class Animal {
constructor( obj ) {
// Create an object that holds all available options
const defaultOptions = {
name: '',
weight: 0,
};
// Go over all available options
Object.keys( defaultOptions ).forEach( key => {
// Check if obj has key, otherwise use default option
this[ key ] = obj[ key ] || defaultOptions[ key ];
} );
}
}
const obj = {
name: "name",
weight: 5,
someRedundantProp: "bla"
}
const a = new Animal( obj );
console.log( a );

答案 2 :(得分:0)
我现在来到这个解决方案
let animal = new Animal()
Object.keys(animal).forEach(field => animal[field] = obj[field])