Heim >Web-Frontend >Front-End-Fragen und Antworten >Welche Möglichkeiten gibt es, Objekte der obersten Ebene in es6 zu erhalten?

Welche Möglichkeiten gibt es, Objekte der obersten Ebene in es6 zu erhalten?

WBOY
WBOYOriginal
2022-08-18 16:24:111470Durchsuche

ES6 So erhalten Sie das Objekt der obersten Ebene: 1. Verwenden Sie die Methode „typeof window !== ‚undefiniert‘ ? window : (...) ? global : this“, um es abzurufen function () {.. .throw new Error('globales Objekt konnte nicht gefunden werden');};" Methode zum Abrufen.

Welche Möglichkeiten gibt es, Objekte der obersten Ebene in es6 zu erhalten?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, ECMAScript Version 6.0, Dell G3-Computer.

Welche Möglichkeiten gibt es, Objekte der obersten Ebene in es6 zu erhalten? Vor ES6 waren die Eigenschaften von Objekten der obersten Ebene und globalen Variablen gleichwertig, aber in ES6 begann man, Objekte der obersten Ebene und globale Objekte zu trennen.

Nachteile der Nichttrennung

    Der Fehler nicht deklarierter Variablen kann in der Kompilierungsphase nicht gemeldet werden und kann nur zur Laufzeit erkannt werden.
  • Es ist einfach, globale Variablen zu erstellen, ohne es zu wissen
  • Das Objekt der obersten Ebene kann nach Belieben gelesen und geschrieben werden
  • Das Fensterobjekt bedeutet Fenster und bezieht sich auf das Fensterobjekt des Browsers. Es ist ein unangemessenes Design, wenn das Objekt der obersten Ebene eine Entitätsbedeutung hat. Die von den Befehlen var und function deklarierten globalen Variablen sind immer noch Attribute des Objekts der obersten Ebene.
  • Globale Variablen, die von let, const und class deklariert werden, sind keine Attribute des Objekts der obersten Ebene.

Objekt der obersten Ebene

  • Browser: Fensterobjekt

  • Knoten: globales Objekt
  • Uneinheitliches Objekt der obersten Ebene

Das Objekt der obersten Ebene im Browser ist Fenster, aber Node und Web Worker zeigen kein Fenster an. In Browsern und Web Workern verweist self auch auf das Objekt der obersten Ebene, aber Node verfügt nicht über self.

In Node ist das Objekt der obersten Ebene global, wird jedoch in anderen Umgebungen nicht unterstützt. „Holen Sie sich das Objekt der obersten Ebene.“ Funktion

(1) Bei einfacher Ausführung als Funktion kehrt dies zur obersten Ebene zurück

(2) Im strikten Modus wird undefiniert zurückgegebennew Function('return this')(); gibt immer das globale Objekt zurück. Aber wenn der Browser CSP verwendet, sind Eval- und neue Funktionsmethoden möglicherweise nicht verfügbar

CSP: Inhaltssicherheitsrichtlinie, Inhaltssicherheitsrichtlinie. Es funktioniert mit Ressourcen, die von der Website über einen Whitelist-Mechanismus geladen oder ausgeführt werden, der auf der Webseite durch HTTP-Header-Informationen oder Metaelemente definiert wird. Aber es verursachte auch die folgenden Probleme:

Bewertung und zugehörige Funktionen sind deaktiviert.

Eingebetteter JavaScript-Code wird nicht ausgeführt. Remote-Skripte können nur über die Whitelist geladen werden.

So erhalten Sie das Objekt der obersten Ebene

// 方法1
// 针对 浏览器中 顶层对象是window,但是Node和Web Worker没有window。
( 
	typeof window !== 'undefined' ? window : (
		typeof process === 'object' &&
		typeof require === 'function' &&
		typeof global === 'object'
	) ? global : this
);

//方法2
// 针对 浏览器和Web Worker中,self也指向顶层对象,但是Node没有self。
var getGlobal = function () {
	if (typeof self !== 'undefined') { 
		return self; 
	}
	if (typeof window !== 'undefined') {
		return window; 
	}
	if (typeof global !== 'undefined') {
		return global; 
	}
	throw new Error('unable to locate global object');
};

[Verwandte Empfehlungen:

Javascript-Video-Tutorial

,

Web-Frontend

]

Das obige ist der detaillierte Inhalt vonWelche Möglichkeiten gibt es, Objekte der obersten Ebene in es6 zu erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn