【发布时间】:2019-01-27 02:50:49
【问题描述】:
我有这个 JavaScript 代码的 sn-p:
class Foo {
constructor() {
this.b = 1;
this.getB = () => { return this.b; };
}
}
const normalFoo = new Foo();
const clonedFoo = magicClone(normalFoo);
clonedFoo.b = 5;
console.log(clonedFoo instanceof Foo); // should be true
console.log(clonedFoo.getB()); // should be 5
我想知道我可以用什么替换 magicClone 以获得所需的结果(例如,尊重箭头函数绑定的克隆)。
我可以接受任何类型的可怕黑客攻击,我也可以接受大多数在这种情况下有效的解决方案。这主要是为了我的熏陶:)
请不要将这个问题作为重复问题关闭 - 克隆对象已被多次询问,但我找不到一个可以做到这一点的答案。 Object.assign、lodash的cloneDeep、jQuery的clone等都没有处理这种情况。
【问题讨论】:
-
我可以想到一个解决方案,它涉及创建类似于 JSON 但不兼容的自定义字符串格式。显然这需要一段时间才能实现,但这看起来像是您会考虑使用的东西,还是更容易弄清楚如何解决这个问题?
-
@PatrickRoberts 我会对任何可行的想法感兴趣,即使它没有完全充实。我在使用这种字符串序列化时遇到的问题是无法将箭头函数重新绑定到适当的上下文,但我很想被证明是错误的!
-
是的,既然你这么说,我不确定我的解决方案是否有效。我支持 charlietfl,因为这是一种不良做法™
-
@PatrickRoberts 是的,我知道从技术上讲这是一种不好的做法......我的想法是我想构建一个克隆功能,以适应其他人所做的不良做法。无论如何,它主要是供我自己使用的,所以我并不介意 hacky 解决方案。
标签: javascript scope clone deep-copy