我有以下JavaScript对象:
function Node() {
this.id = 0;
this.parent = null;
this.children = [];
}
Node.prototype.toString = function() {
return "ID: " + this.id;
};
以下是一个如何使用的示例:
var node = new Node();
node.id = 1;
node.parent = new Node();
parent.children.push(node);
node.toString(); // returns "ID: 1"
现在我遇到以下问题:
上面的示例代码在Web worker中执行 - 因此在那里创建节点。之后,我使用postMessage()
将节点发送到主线程。
JavaScript会自动创建对象的深层副本。但是 - 当然 - 当这样做时,它会创建一个普通的JavaScript对象,而不是从Node
继承它的属性的对象。因此,无法在主线程中调用toString()
函数。
恢复节点的最简单,最高效的方法是什么,以便我的原型方法再次可用?这应该在我从Web worker收到对象后在主线程中完成。
理想情况下,应该在不创建数据的另一个副本的情况下完成,因为它可能包含大量节点并且还有循环。
我的解决方法是放弃原型方法,而是将节点作为参数传递给自由函数。但这不是一件好事。
答案 0 :(得分:0)
然后定义你的protos并将它们添加到收到的节点,如:
let proto = node => { return {toString: () => 'ID: ' + node.id}}
let node = new Node();
node = Object.assign(node, proto(node));