ホームページ  >  記事  >  ウェブフロントエンド  >  es6 でトップレベルのオブジェクトを取得する方法は何ですか

es6 でトップレベルのオブジェクトを取得する方法は何ですか

WBOY
WBOYオリジナル
2022-08-18 16:24:111400ブラウズ

es6 最上位オブジェクトの取得方法: 1. "typeof window !== 'unknown' ? window : (...) ? global : this" メソッドを使用して取得します。 2. " を使用します。 var getGlobal = function ( ) {...throw new Error('unable tolocglobal object');};" メソッドを取得します。

es6 でトップレベルのオブジェクトを取得する方法は何ですか

このチュートリアルの動作環境: Windows 10 システム、ECMAScript バージョン 6.0、Dell G3 コンピューター。

es6 でトップレベル オブジェクトを取得する方法は何ですか

ES6 より前では、トップレベル オブジェクトとグローバル変数のプロパティは同等でしたが、ES6 ではトップレベルオブジェクトとグローバル オブジェクトが分離され始めました。

分離しないことの欠点

  • 宣言されていない変数のエラーはコンパイル段階では報告できず、実行時にのみ報告されます。ただ知られているだけです。

  • #グローバル変数は知らずに簡単に作成できます

  • #トップレベルのオブジェクトは自由に読み書きできます
  • window オブジェクトはウィンドウを意味し、ブラウザのウィンドウ オブジェクトを指します。最上位オブジェクトにエンティティの意味を持たせるのは不適切な設計です

方法を変更してください

    var および function コマンドによって宣言されたグローバル変数は、依然としてトップレベル オブジェクトの属性です。
  • let、const、および class によって宣言されたグローバル変数は、トップレベル オブジェクトの属性ではありません。
#トップレベル オブジェクト

ブラウザ: ウィンドウ オブジェクト

ノード: グローバル オブジェクト

統合されていないトップレベル オブジェクト

ブラウザのトップレベル オブジェクトはウィンドウですが、Node と Web Worker にはウィンドウがありません。

ブラウザや Web ワーカーでは、self もトップレベルのオブジェクトを指しますが、Node には self がありません。

Node では、トップレベルのオブジェクトはグローバルですが、他の環境ではサポートされません。

最上位オブジェクトの取得

制限事項

グローバル環境では、これは返されます。トップレベルのオブジェクト;

Node モジュールと ES6 モジュールでは、現在のモジュールで this を返します

function

(1) 単純に関数として実行する場合、これはトップレベルの

を返します (2) 厳密モードでは、return unknown

new Function('return this')(); は常にグローバル オブジェクトを返します。

ただし、ブラウザが CSP を使用している場合、eval メソッドと new Function メソッドは使用できない場合があります。

CSP: コンテンツ セキュリティ ポリシー、コンテンツ セキュリティ ポリシー。これは、HTTP ヘッダー情報またはメタ要素を通じて Web ページで定義されているホワイトリスト メカニズムを通じて、Web サイトによってロードまたは実行されるリソースに対して機能します。ただし、次の問題も発生しました。

eval および関連機能が無効になります。

    埋め込まれた JavaScript コードは実行されません。
  1. リモート スクリプトは、ホワイトリストを通じてのみロードできます。
最上位オブジェクトの取得方法

// 方法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');
};
[関連する推奨事項:
JavaScript ビデオ チュートリアル

ウェブ フロントエンド]

以上がes6 でトップレベルのオブジェクトを取得する方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。