簡體   English   中英

提取所有使用的javascript變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM