如何将多个类属性设置为一个对象的属性

时间:2019-01-18 13:17:20

标签: javascript typescript class oop

我面临的问题是我不想调用一个将两个属性都返回两次的函数,相反,我基本上想这样做:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       { this.x, this.y } = foo(arg); //this function returns an object with two properties
   }

}

代替此:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       this.x = foo(arg).x;
       this.y = foo(arg).y;
   }
}

2 个答案:

答案 0 :(得分:1)

假设foo(arg)返回一个仅具有xy属性的对象:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       Object.assign(this, foo(arg));
   }
}

如果foo可能返回更多属性,则需要手动获取属性:

class xy {
   x: number;
   y: number;

   constructor (arg) {
       const {x, y} = foo(arg);
       Object.assign(this, {x, y});
   }
}

答案 1 :(得分:1)

如前所述,您可以使用Object.assign,但请注意,它会在{返回的对象中分配所有个(拥有的,可枚举的)属性{1}}。

为避免这种情况,可以使用解构:

foo

它不会给你带来什么好处,但是...

您可以结合使用以下方法:

const {x, y} = foo(arg);
this.x = x;
this.y = y;

...以(理论上)临时对象分配为代价。 (我说“理论上”,因为JavaScript引擎可以对其进行优化。但是我不知道会这样。)


this proposal was put forward用于这种情况。可悲的是,与委员会的对话没有任何吸引力。如果该建议继续进行,您可以执行以下操作:

const {x, y} = foo(arg);
Object.assign(this, {x, y});