如何重新分配对象方法/属性到新对象?



我偶然发现了一件有趣的事。当我创建一个新对象为一个方法设置一个新键时,它在试图访问(使用)它时不能正确处理它。请看下面的例子:

const cases = [
{ instance: instance.mydecorator, triggerEffects: useMyDecorator },
];

,然后我想循环如下:

cases.forEach(({ instance, triggerEffects }) => {
instance = [
Story => {
triggerEffects();
return <Story />;
},
];
});

上面的例子不起作用:instance != instance。

有效的方法是:

const cases = [
{ instance: instance, triggerEffects: useMyDecorator },
];
cases.forEach(({ instance, triggerEffects }) => {
instance.mydecorator = [
Story => {
triggerEffects();
return <Story />;
},
];
});

你的代码问题是你在foreach回调输入参数中使用的解构-这部分=>cases.forEach(({ instance, triggerEffects })...。当你这样做的时候,你解构了数组元素,当你看你的数组声明实例指向一些其他的实例对象,所以在解构{ instance, triggerEffects }实例将指向右边的实例从你的数组声明-你基本上访问(用这个标记)到const cases = [ { instance: instance(THIS ONE), triggerEffects: useMyDecorator }, ];,而不是你所期望的左边的一个。

在这种情况下,您需要做的是避免解构,因为您不想修改右边的实例,而是数组的实际元素。这样做:
cases.forEach(element => {
element.instance = [
Story => {
element.triggerEffects();
return <Story />;
},
];
});