object.assign不复制函数

Pas*_*cal 2 javascript typescript ecmascript-6

我有一个常见的打字稿类和一些函数.

当我做 this.selected = Object.assign({} as AssignedTestType, newTestType);

选定的实例不拥有该功能,这些都是type AssignedTestType.

如何使用object.assign制作"深层"副本?或任何替代方法?

Asa*_*din 7

如果您要复制的属性位于原型中newTestType,则不会复制它们,因为Object.assign只复制对象实例自己的属性.

替代方法是实例化您用于创建的任何构造函数newTestType,并将结果实例分配给this.selected,或创建一个空对象并将其原型设置为newTestType.在任何一种情况下,这Object.assign都是错误的工具.

  • 正如我在回答中提到的,未复制的属性(您所说的包含函数)可能位于对象的原型上,因此不会被“Object.assign”忽略。 (2认同)

Tha*_*you 7

object.assign不复制函数

那是不真实的

let x = {a: y => y * 2}
let z = Object.assign({}, x)
console.log(z.a(5)); // 10
Run Code Online (Sandbox Code Playgroud)

所选实例不拥有AssignedTestType类型的函数.

现在这部分是真的.Object.assign只会做一个浅拷贝,只会枚举自己的道具

  • 尽管答案对我没有帮助,但我将其标记为解决方案,因为它在理论上是正确的。只是我不能放在桌子上的代码表现得很假...... (4认同)