Javascript JS:是否可以从webworkers将引用对象转移到其他对象?

Javascript JS:是否可以从webworkers将引用对象转移到其他对象?,javascript,web-worker,Javascript,Web Worker,我的程序的一部分涉及将文本解析为数据结构,这些数据结构使用对结构中其他对象的引用。由于它在程序中的适用性,它将是WebWorkers的完美候选,因为它可以在计算其他内容时进行,并且不依赖于传递到其中的数据以外的任何其他数据 例如,让我们使用以下webworker代码: self.onmessage = (e) => { let a; let b; let c; a = { obj1: b, obj2: c }

我的程序的一部分涉及将文本解析为数据结构,这些数据结构使用对结构中其他对象的引用。由于它在程序中的适用性,它将是WebWorkers的完美候选,因为它可以在计算其他内容时进行,并且不依赖于传递到其中的数据以外的任何其他数据

例如,让我们使用以下webworker代码:

self.onmessage = (e) => {
    let a;
    let b;
    let c;

    a = {
        obj1: b,
        obj2: c
    }

    b = {
        obj1: a,
        obj2: a
    }

    c = {
        obj1: b,
        obj2: b
    }

    let myArr = [a, b, c];

    self.postMessage(myArr);
}

当前,如果我在web worker中生成该元素并返回
myArr
,则每个元素的obj1和obj2都未定义。有没有办法从网络工作者那里得到这些参考资料?

好的,我想出来了。我误解了参考资料的工作原理,这导致了我的错误

问题是我正在重新分配对象,并在将它们发回主线程之前破坏引用

所以不是

let a;
let b;

a = {ref: b}
b = {ref: a}
在上面的示例中,
b
一开始是未定义的,这意味着当我们将其分配给
a.ref
a.ref=undefined
,并且当我们分配
b.ref=a
时,b现在是
b={ref:{ref:undefined}

为了解决这个问题,我需要确保首先将变量分配给它们的对象

let a = {ref: null}
let b = {ref: null}

a.ref = b;
b.ref = a;
一旦我解决了这个问题,一切似乎都很好,更改
b
现在会更新主线程中的
a.ref
。如果我刚刚将变量声明为
let a=new SomeClass()


如果您面临类似的问题,请不要使用
JSON.stringify()
!一开始它可能看起来很有效,但实际上它所做的是将您的引用深度复制到其他对象,这意味着对
b
的更改实际上不会更新
a.ref
,因为
a.ref
现在只是
b
的一个副本,不再是引用。

您能在worker中
JSON.stringify(myArr)
吗,然后在主文件中
JSON.parse(e.message)
?嗯,奇怪。我以为这就是JS在幕后所做的,但我猜不是。不管怎样,它都不起作用。即使在使用类修改了实例化a、b和c的代码之后,似乎通过树复制了对象值,即:如果我对
b
进行更改,那么
a.obj1
(引用b)将不会反映该更改