global Referenz
Ich bin auf der Suche nach einer Möglichkeit, zu identifizieren oder zu definieren, wenn die „global“ zu prüfen (es gibt ein superglobales "Fenster" - und wenn nicht, es als solches zu erschaffen.JavaScript - wie die „global“ (Super-global) für plattformübergreifende Verwendung im Strict-Modus
Ich habe das vor ein paar Wochen in einem Code auf GitHub gesehen, aber jetzt, wo ich es brauche, kann ich es nirgends finden. Ich habe vielleicht übersehen, aber es war sehr kurz und alle intelligent wie auf 1 (kurze) Linie - ohne if
, und ohne var
(oder let
) - im globalen Rahmen -> im strikten Modus.
Ich habe nach 2 Stunden gesucht, um das zu finden, und alles, was ich finden kann, ist unzählige Verweise auf "globale Variablen" - die in diesem Fall eindeutig keine "Variable" wie das super-globale "Fenster" (oder in NodeJS "global") ist nicht änderbar.
Die Lösung, die ich zur Zeit habe, ist nicht so toll, aber es funktioniert, Art-of:
"use strict";
if ('undefined' == typeof global)
{
Object.defineProperty
(
window,'global',
{
writable:false,
configurable:false,
enumerable:false,
value:window
}
);
}
Also, wenn Sie so etwas wie versuchen:
global = 'bite me!';
Dann wird das Verhalten als erwartet es wirft:
Uncaught TypeError: Cannot assign to read only property 'global' of...
Welches ist gut, - genau wie es sich verhalten sollte.
Ich bin nicht sicher, ob dies der richtige Weg, es zu definieren ist, denn wenn ich etwas tun:
console.log(global);
Dann wird die Konsole so etwas wie dies zeigt:
Window {top: Window, ...
Das sagt mir, dass es nicht als "global", sondern als "Fenster" identifiziert wird; - was alles schön und gut ist ein "Rundschreiben"; Ich bin mir jedoch sicher, dass es einen besseren Weg dafür gibt.
Jede Eingabe wird sehr geschätzt, dank
'window = Fenster || global || {einige: new_object} ' – adeneo
@adeneo :: im Browser," Fenster "existiert bereits, so wird es nur" Fenster "in diesem Fall bleiben - und" global "wird nicht definiert werden; sondern es wird geworfen, weil "global" nicht definiert ist. Wenn Sie dies im "strict mode" tun, wird ein Fehler ausgegeben, wenn "window" nicht definiert ist, wie bei NodeJS;) – argon
Nun, Sie können das globale nicht überschreiben, wenn es existiert, sollte es Sei es was es schon ist, oder? – adeneo