在Javascript中填充具有预期属性

时间:2017-11-11 13:33:06

标签: javascript

我有一个原型

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)

但如果在某些时候我会介绍新的属性,我将不得不在这里更改代码,我不想要的。

有更好的方法吗?

3 个答案:

答案 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])