[英]extracting all used javascript variables
我在全局范圍內定義了一個大對象,稱為global
。 我想在全局變量下動態找到所有引用的屬性。 即,在代碼執行期間訪問的所有屬性。
我想進行靜態代碼分析以提取變量下所有引用的屬性。 我可以搜索以下模式:global.PROPERTY_NAME和global [PROPERTY_NAM]。 但是,像這樣的復雜情況呢?
var tmp="PROPERTY_NAME";
global[tmp]
要么
var tmp=global;
tmp.PROPERTY_NAME
還有其他的?
我不想獲取所有變量的屬性。 我只想要引用的ONES列表! 僅在我的源代碼中引用的屬性
編輯后:
您正在尋找的是JavaScript 代理對象。 這是有關如何使用它們的教程 。
代理對象使您可以包裝對象並在訪問其屬性時執行方法。 不幸的是,目前來看,它們並未得到廣泛支持。
當前,這是JavaScript中無需更改原始global
對象即可完成此操作的唯一方法。
您可以通過在about:flags標簽中啟用實驗性JavaScript在Chrome中啟用它們。
編輯之前:
您正在尋找的功能稱為反射 ,JavaScript很好地支持了它
這是一些遍歷對象並獲取其屬性的代碼
for(var prop in global){
if(global.hasOwnProperty(prop)){ //this is to only get its properties and not its prototype's
alert(prop+" => "+global[prop]);
}
}
這是相當跨瀏覽器的。 更現代的瀏覽器允許您以更簡單的方式執行此操作,例如Object.keys(global)返回包含其所有可枚舉屬性的數組,或者Object.getOwnPropertyNames(global)返回可枚舉和不可枚舉的屬性。
由於JavaScript具有動態特性,因此無法通過靜態代碼分析來實現。 考慮這樣的情況:
var prop = document.getElementById('prop').value;
global[prop];
不可能。 另一種動態分析方法是,您需要修改全局對象以記錄對其屬性的訪問,然后運行代碼。 這在JavaScript中很容易實現,但對您也沒有幫助,因為您將如何確保已涵蓋所有可能的訪問方式? 特別是在5 MB的JavaScript中,您最有可能會遇到一些極端情況。
因此,如果您不能縮小需求范圍,那將是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.