根据 MDN,File
可以将对象传递给 Web Workers,并使用结构化克隆算法正确克隆它们。到目前为止,一切都很好。这适用于我测试过的所有浏览器:
// myFile comes from a form.
// webWorker is the WebWorker object.
webWorker(myFile); // myFile appears as-is on the other side,
// only losing non-enumerable properties
// and functions, per the spec.
但这不起作用:
// myFile comes from a form.
// webWorker is the WebWorker object.
myFile.customIdProperty = 'some string value';
webWorker(myFile); // myFile appears on the other side,
// WITHOUT the 'customIdProperty' property.
奇怪的是,这个作品:
// myFile is a custom object now.
// webWorker is the WebWorker object.
myFile = {};
myFile.customIdProperty = 'some string value';
webWorker(myFile); // myFile appears on the other side,
// WITH the 'customIdProperty' property.
这发生在 Chrome、Firefox 等的最新版本中,所以我认为这不是浏览器问题。
选项:
- 我做错了什么,这导致克隆对象时该属性丢失。
- 当克隆预定义对象(如文件)而不是我创建的对象时,我添加的所有自定义属性都会丢失,因为浏览器会忽略非标准对象属性。
- 我不理解规范,很明显,在将对象传递给 Web Worker 时不会克隆自定义属性。
我在这里做错了吗?提前致谢 ;))