研究一個(gè)網(wǎng)站前端技術(shù)的時(shí)候,了解它的全局的對(duì)象是一個(gè)好的入口,
一般來(lái)說(shuō),常見(jiàn)的庫(kù)就會(huì)用外觀模式,最后暴露一個(gè)對(duì)象給用戶(hù)調(diào)用,
比如jQuery,requirejs,angular,react
均是用這種方式。
如果沒(méi)有用cmd/amd模塊化或類(lèi)似webpack工具打包的話(huà),會(huì)給全局對(duì)象window添加一個(gè)屬性,如angular:
如React
同時(shí),為了避免全局污染,也要關(guān)注全局變量的個(gè)數(shù)和詳情。
How
可以通過(guò)ES5的新增api(Object.keys)看瀏覽器全局變量列表:Object.keys(window)
發(fā)現(xiàn)一般的網(wǎng)站都有兩百多個(gè)全局變量,人力去看且需要區(qū)分是否是用戶(hù)定義的比較困難,需要一個(gè)script去列出所有的非原生的全局屬性.
開(kāi)始想的是能不能防篡改對(duì)象的相關(guān)檢測(cè)api(Object.isExtensible,Object.isSealed,Object.isFrozen)來(lái)判斷是否原生api?
但并不是所有的原生對(duì)象都是seaded. 所以此方法行不通。
那么能不能有一個(gè)純凈的、沒(méi)有加載第三方庫(kù)的全局對(duì)象?
對(duì)于瀏覽器環(huán)境,我們有iframe
可以添加一個(gè)iframe,然后對(duì)比當(dāng)前的window,就可以得到詳細(xì)列表。
var iframe = document.createElement("iframe"); document.body.appendChild(iframe); Object.keys(iframe.contentWindow).length
列出非原來(lái)對(duì)象
(function(){ var iframe =
網(wǎng)友評(píng)論