7

私はそのようなオブジェクトを持っています:

function A(id) {
    this.id = id;
}

A.prototype.getId = function() {
    return this.id;
}

これは、htmlページにファイル( "objects.js")として含まれているほか、importScript( "objects.js")を使用してWebワーカーに含まれています。ここで、「var a = new A()」を使用してhtmlページにAのインスタンスを作成し、「postMessage()」を使用してWebワーカーに投稿します。

面白いことに、ワーカーにはその値を持つプロパティ「id」がまだありますが、プロトタイプ関数は失われます。その理由は、プロトタイプ関数がWebワーカーのコンテキストではなくhtmlページのコンテキストに「バインド」されているためかもしれません。

だから私が労働者でやっていることはそれです:

event.data.a.__proto__ = A.prototype;

それは機能していて、私はそれをある種のキャストとして見ています...

さて、私の質問は、それが唯一の有効な方法なのか、それともプロトタイプ関数を備えたオブジェクトをWebワーカーに投稿するためのより良い方法があるのか​​ということです。オブジェクト定義は、両方のコンテキストで使用できます。

4

2 に答える 2

1

Webworkers の仕様では、文字列以外を渡すことは許可されていません。

これについての質問です。

そのため、(たとえば) json を使用してオブジェクト データをシリアル化し、反対側で逆シリアル化して、同じデータを使用して Webworker 内にオブジェクトの新しいインスタンスを作成する必要があります。

同じメソッドを使用してオブジェクトを再度渡すことができますが、どちらも type のオブジェクトを作成、シリアル化、および逆シリアル化する方法を知っている必要がありますA

于 2013-03-12T12:16:22.707 に答える