亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6如何獲取頂層對象

發布時間:2022-08-24 11:07:18 來源:億速云 閱讀:126 作者:iii 欄目:web開發

本篇內容介紹了“es6如何獲取頂層對象”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

es6獲取頂層對象的方式:1、利用“typeof window !== 'undefined' ? window : (...) ? global : this”方法獲取;2、利用“var getGlobal = function () {...throw new Error('unable to locate global object');};”方法獲取。

本教程操作環境:windows10系統、ECMAScript 6.0版本、Dell G3電腦。

es6獲取頂層對象的方式

ES6之前,頂層對象的屬性和全局變量是等價的,但是在ES6,頂層對象和全局對象開始分離。

不分離的弊端

  • 無法在編譯階段就報出變量未聲明的錯誤,只有運行時才知道。

  • 容易在不知不覺中創建全局變量

  • 頂層對象可隨意讀寫

  • window對象有窗口的意思,指的瀏覽器的窗口對象。而頂層對象有實體意義是一個不合適的設計

改變方式

  • var和function命令聲明的全局變量,依舊是頂層對象的屬性。

  • let、const、class聲明的全局變量,不屬于頂層對象的屬性。

頂層對象

瀏覽器:window對象

Node:global對象

不統一的頂層對象

瀏覽器中 頂層對象是window,但是Node和Web Worker沒有window。

瀏覽器和Web Worker中,self也指向頂層對象,但是Node沒有self。

Node中,頂層對象是global,但其他環境不支持。

獲取頂層對象

局限性

全局環境中,this返回頂層對象;

Node模塊和ES6模塊中,this返回當前模塊

函數中的this

(1) 單純作為函數運行,this返回頂層

(2) 嚴格模式下,返回undefined

new Function(‘return this’)();總是返回全局對象。

但是如果瀏覽器用了CSP,那么eval,new Function這些方法都可能無法使用

CSP:Content Security Policy,內容安全政策。它以白名單的機制對網站加載或執行的資源起作用,在網頁中通過HTTP頭信息或者meta元素定義。但是也造成了以下問題

  1. eval及相關函數被禁用。

  2. 內嵌的JavaScript代碼將不會執行。

  3. 只能通過白名單來加載遠程腳本。

獲取頂層對象的方法

// 方法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');
};

“es6如何獲取頂層對象”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

es6
AI

运城市| 开远市| 台东县| 马尔康县| 大新县| 兰州市| 本溪市| 遂平县| 南昌市| 河池市| 盐城市| 时尚| 广东省| 尚义县| 弥勒县| 浮山县| 白水县| 洮南市| 民和| 阜平县| 巫溪县| 温泉县| 永嘉县| 邻水| 赤水市| 英吉沙县| 宁武县| 清水河县| 忻州市| 大港区| 苏尼特左旗| 临沧市| 云南省| 漳平市| 阿拉善右旗| 东辽县| 潼关县| 西峡县| 隆化县| 张家界市| 抚顺市|