Ich habe ein Objekt wie folgt aus:Geben eines Javascript-Objekt zu Web Worker
function A(id) {
this.id = id;
}
A.prototype.getId = function() {
return this.id;
}
Es in einer html-Seite als Datei enthalten ist ("objects.js") sowie in der Web-Arbeiter mit importScript ("objects.js"). Jetzt erstelle ich eine Instanz von A in der HTML-Seite mit "var a = new A()" und poste sie mit "postMessage()" an einen Web Worker.
Die lustige Sache ist, dass in der Worker es immer noch die Eigenschaft "ID" mit seinem Wert hat, aber die Prototyp-Funktion ist verloren. Ich vermute, der Grund könnte sein, dass die Prototyp-Funktionen an den Kontext der HTML-Seite gebunden sind und nicht an den Web-Worker-Kontext.
Also, was ich in dem Arbeiter zu tun ist, dass:
event.data.a.__proto__ = A.prototype;
Es funktioniert, und ich sehe es als eine Art Guss ...
Nun meine Frage ist, ob das ist die einzige und ein gültiger Weg oder wenn es eine bessere Möglichkeit gibt, ein Objekt mit Prototypfunktionen an einen Web-Arbeiter zu senden. Die Objektdefinition ist in beiden Kontexten verfügbar ...
Ich bin mir ziemlich sicher, dass es auch möglich ist, ein Objekt zu übergeben, solange es nicht funktioniert. Zumindest funktioniert es für mich in allen gängigen Browsern ... – user2160787
@ user2160787 Ja, aber nur, weil Javascript automatisch einfache Objekte (zB Arrays) serialisiert und deserialisiert. – fredrik
ok danke, also ich schätze ich lehne nur die Prototypfunktionen ab :) – user2160787