文件实例上的自定义 属性 在传递给 Web Worker 时未被克隆
Custom property on File instance not cloned when passing to web worker
根据 MDN,File
对象可以传递给 Web Worker,并且可以使用结构化克隆算法正确克隆它们。到目前为止,一切都很好。这适用于我测试过的所有浏览器:
// 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 时不会克隆自定义属性。
我是不是做错了什么?
提前致谢 ;))
File 接口有自己的 serialization steps,这不是 Javascript 对象的接口。所以是的,您的自定义属性丢失了,因为这些步骤不包括获取自己的属性。
Set serialized.[[SnapshotState]] to value’s snapshot state.
Set serialized.[[ByteSequence]] to value’s underlying byte sequence.
Set serialized.[[Name]] to the value of value’s name attribute.
Set serialized.[[LastModified]] to the value of value’s lastModified attribute.
根据 MDN,File
对象可以传递给 Web Worker,并且可以使用结构化克隆算法正确克隆它们。到目前为止,一切都很好。这适用于我测试过的所有浏览器:
// 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 时不会克隆自定义属性。
我是不是做错了什么? 提前致谢 ;))
File 接口有自己的 serialization steps,这不是 Javascript 对象的接口。所以是的,您的自定义属性丢失了,因为这些步骤不包括获取自己的属性。
Set serialized.[[SnapshotState]] to value’s snapshot state.
Set serialized.[[ByteSequence]] to value’s underlying byte sequence.
Set serialized.[[Name]] to the value of value’s name attribute.
Set serialized.[[LastModified]] to the value of value’s lastModified attribute.