我正在研究react自定义渲染器,我必须将react道具浅层复制到后端元素,该元素具有一些保留属性,例如“ key”,“ ref”,“ children”,我应该过滤掉这些属性,尤其是“子级”与元素的“子级”属性冲突,Object.assign无法做到这一点。我不需要复制未知的属性,只需要复制一个受限制的属性即可。
与Object.assign相比,我发现了一些奇怪的东西,在迭代中对switch语句进行硬编码可以在大多数现代浏览器上获得更好的性能,并且我发现与手写代码相比,使用生成的代码可以获得更好的性能(我不确定,它的性能与我的重构代码中的手写代码相同)。
for (var key of Object.keys(source)) {
switch (key) {
case 'a': target.a = source.a; break;
case 'b': target.b = source.b; break;
// ....
}
}
我创建了几个测试用例:
https://jsperf.com/copy-known-properties-few
https://jsperf.com/copy-known-properties-many/4
https://jsperf.com/copy-known-properties-polymorphic
第二个例子包括一个额外的构造函数案例。
这里也是重构版本测试,更容易阅读:
https://stackblitz.com/edit/limited-assign-perf
我想知道为什么以及是否可行,或者还有更好的方法。
我的第一个问题,谢谢。