首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用web工作者冻结对象

使用web工作者冻结对象
EN

Stack Overflow用户
提问于 2016-02-11 12:02:35
回答 1查看 306关注 0票数 3

我有一系列的集合,需要使用worker的冻住。下面的样本显示了一次收集冻结。

代码语言:javascript
复制
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
    });
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-11 13:15:08

当您调用postMessage(obj)时,您不会发送obj --这是使用结构化克隆算法克隆

MDN页面非常明确地说明了冻结对象的情况:

属性描述符、setters和getter(以及类似的元数据样功能)不是复制的。例如,如果一个对象使用属性描述符标记为只读,那么它将被读-写在副本中,因为这是默认条件。

因此,您不能冻结WebWorker中的对象并将其发送回主线程。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35338846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档