繁体   English   中英

使用web-worker冻结对象

[英]Freeze objects using web-worker

我有一系列需要使用web-worker 冻结的集合。 以下示例显示单一收集冻结。

var worker = new Worker("worker.js");
worker.onmessage = function (e) { // WATCH MESSAGES FROM THE WORKER
    var data = e.data;

    // TEST: freezed collection property changes here in main scope. Weird!!!
};

worker.postMessage(JSON.stringify({
        'collection' : someHugeJSON_object
    }));

// In my worker.js

function deepFreeze(){
    // my freezing logic
}

onmessage = function (e) {

    var data = JSON.parse(e.data);
    freezedJSON_object = deepFreeze(data.collection);   

    // TEST: collection property does not change in worker scope after freezing

    // DONE FREEZING EVERYTHING... PHEW!!!
    postMessage({ 
        'collection' : freezedJSON_object
    });
}

对象的可枚举性,可配置性或可写性属性是否仅限于特定范围?

当你调用postMessage(obj)你不送obj -它使用克隆 结构克隆算法

MDN页面对冻结对象的发生情况非常明确:

属性描述符 ,setter和getter( 以及类似的类似元数据的特性不会重复 例如,如果使用属性描述符将对象标记为只读,则它将以重复方式进行读写,因为这是默认条件。

因此,您无法在WebWorker中冻结对象并将其发送回主线程。

顺便说一下 - 您不必在传递给WebWorker的消息上调用JSON.stringify

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM