Signatur
Beschreibung
Die schreibgeschützte Eigenschaft name des globalen Worker-Objekts (self bzw. globalThis im Worker) enthält den Namen, den das Hauptskript dem Worker beim Erzeugen gegeben hat. Du vergibst den Namen über die Option name im zweiten Argument des Konstruktors: new Worker("worker.js", { name: "bildverarbeitung" }). Ohne diese Option ist der Wert ein leerer String ("").
Hauptsächlich nutzt man den Namen zur Fehlersuche und Protokollierung: Die Entwicklerwerkzeuge der Browser zeigen ihn in der Liste der Threads und im Debugger an. So findest du bei mehreren Workern schnell den richtigen. Außerdem kann ein und dasselbe Worker-Skript anhand von self.name seine Rolle erkennen, zum Beispiel als Worker Nr. 3 in einem Worker-Pool, oder seinen Log-Ausgaben ein Präfix voranstellen.
Der Name ist ausschließlich im Worker selbst lesbar. Das Worker-Objekt im Hauptthread hat keine entsprechende Eigenschaft. Wenn du den Namen auch dort brauchst, musst du ihn selbst speichern. Der Name muss nicht eindeutig sein und hat keine Auswirkung darauf, wie der Worker ausgeführt wird.
Rückgabewert
name übergebene Name des Workers. Wurde keiner angegeben, ist der Wert ein leerer String "".Beispiele
Worker mit Namen erzeugen und den Namen im Worker auslesen
// main.js
const worker = new Worker("worker.js", { name: "bildverarbeitung" });
worker.onmessage = (event) => console.log(event.data);
worker.postMessage("start");
// worker.js
self.onmessage = () => {
self.postMessage(`Hallo vom Worker "${self.name}"`);
};
Worker-Pool: Rolle und Log-Präfix über den Namen festlegen
// main.js – vier Worker mit demselben Skript, aber unterschiedlichen Namen
const pool = Array.from({ length: 4 }, (_, i) =>
new Worker("rechner.js", { name: `rechner-${i}` })
);
pool.forEach((w, i) => w.postMessage({ von: i * 1000, bis: (i + 1) * 1000 }));
// rechner.js
const log = (...args) => console.log(`[${self.name || "unbenannt"}]`, ...args);
self.onmessage = ({ data: { von, bis } }) => {
let summe = 0;
for (let n = von; n < bis; n++) summe += n;
log(`Summe ${von}–${bis - 1}:`, summe);
self.postMessage(summe);
};
Modul-Worker ohne Namen und Schreibschutz
// main.js
new Worker("modul-worker.js", { type: "module" });
// modul-worker.js (Module laufen immer im Strict Mode)
console.log(JSON.stringify(self.name)); // kein Name vergeben
try {
self.name = "neu";
} catch (err) {
console.log(err.constructor.name);
}
// Wichtig · Fallstricke
- Schreibgeschützt: Außerhalb des Strict Mode wird eine Zuweisung wie
self.name = "x"stillschweigend ignoriert. Im Strict Mode, also auch in Modul-Workern (type: "module"), wirft sie einenTypeError. Das ist anders als beiwindow.name, das beschreibbar ist. - Nur im Worker verfügbar: Das
Worker-Objekt im Hauptthread hat keinename-Eigenschaft. Wenn du den Namen dort brauchst, speichere ihn selbst. - Kein Bezeichner: Namen müssen nicht eindeutig sein. Verwende sie nicht als Sicherheits- oder Zugriffsmerkmal, denn jedes Skript kann beliebige Namen vergeben.
- Bei
SharedWorkergibt es eine eigene EigenschaftSharedWorkerGlobalScope.name. Dort ist der Name wichtig: Zusammen mit der URL entscheidet er, ob eine bestehende Worker-Instanz wiederverwendet wird. - Kompatibilität: In allen aktuellen Browsern verfügbar. Sehr alte Versionen ignorieren die Option
name; dann istself.nameundefined. Ein Fallback wieself.name || "unbenannt"fängt das ab.