我试图更好地了解浏览器在将值发送给网络工作者时是否/如何克隆值。
我正在调试我们正在使用的js库 - 他们使用内部调用delete d.children
的网络工作者 - 这不会影响发送给网络工作者的原始对象 - < strong> ,除了IE10
工作人员支持结构化克隆算法,以便可以传递对象 - 但我不明白为什么这不会影响IE。他们不克隆吗?
我正在调试jstree - 不幸的是。
https://github.com/vakata/jstree/blob/master/dist/jstree.js#L1502
相关代码是他们在Web worker中调用的函数。
func = function (data, undefined) {
在这个函数中,他们最终会调用delete d.children
,所以我在顶部手动尝试进行测试。
此行不会影响Chrome中的原始数据对象,IE10 / Windows 7中的DOES
delete data.dat[0].children;
在IE10中,我们提供的数据对象jstree(来自xhr调用的结果)突然失去了children
属性。
该工作人员在此处传递数据:
https://github.com/vakata/jstree/blob/master/dist/jstree.js#L1847
w.postMessage(args);
再次尝试手动删除:
delete args.dat[0].children;
是否在所有浏览器中按预期删除该属性。