在此playground example中,我试图将对象文字转换为具有属性的对象。那不能按预期工作。
class X {
y: string;
get hi(): string {
return `hi ${this.y}`;
}
}
const a = new X();
a.y = 'bob';
const b = { y: 'ham' } as X;
const c = Object.assign(new X(), b);
document.write(a.hi); // ouputs "hi bob"
document.write("<br>");
document.write((b.hi === undefined).toString()); // outputs "true"
document.write("<br>");
Object.assign(b, X.prototype);
document.write((b.hi !== undefined).toString()); // outputs "true"
document.write("<br>");
document.write(b.hi); // **outputs "hi defined" -- want "hi ham"**
document.write("<br>");
document.write(c.hi); // outputs "hi ham"
document.write("<br>");
在演员阵容中是否缺少一些东西可以使这项工作正常进行,还是应该像Object.assign
一样const c = Object.assign(new X(), { y: 'ham' });
?
答案 0 :(得分:2)
我应该像对待const c = Object.assign(new X(),{y:'ham'});一样只是Object.assign;
是的。
理想情况是,尽管您将其带入构造函数中:
class X {
constructor(public y: string){}
get hi(): string {
console.log(this);
return `hi ${this.y}`;
}
}
Object.assign
和类实例不能很好地混合。仅将其用于object literals
。