我面临的问题是我不想调用一个将两个属性都返回两次的函数,相反,我基本上想这样做:
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;
}
}
答案 0 :(得分:1)
假设foo(arg)
返回一个仅具有x
和y
属性的对象:
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});