2010-08-19 77 views
4

正如問題所示 - 是否可以獲取在當前命名空間中聲明的所有變量的名稱?例如,像這樣:JavaScript:是否可以獲取當前名稱空間的內容?

 
>>> var x = 42; 
>>> function bar() { ...} 
>>> getNamespace() 
{ x: 42, bar: function(){} } 
>>> 
+2

重複的http://stackoverflow.com/questions/2051678/getting-all-variables-in-scope,雖然用不同的措辭。 – syockit 2010-08-19 17:36:11

回答

0
function listMembers (obj) { 
    for (var key in obj) { 
     console.log(key + ': ' + obj[key]); 
    } 
} 

// get members for current scope 
listMembers(this);

這可以得到一點毛茸茸的,如果你在全球範圍內(例如window對象。)是。它還會返回內置的和原型的方法。您可以通過抑制這種:

  1. 使用propertyIsEnumerable()hasOwnProperty()
  2. 試圖delete屬性(true主要是指內置的,雖然這可能是不穩定的用戶創建的,false手段)
  3. 剝離件你知道你不想通過其他一些過濾陣列
+0

不幸的是,這不起作用。考慮:'function foo(){var bar = 42; listMembers(本); }' - 在這種情況下,'this'與'bar'的定義沒有任何關係。 – 2010-08-19 18:01:09

-1

您可以獲得當前功能範圍之源,是這樣的:

arguments.callee.toString() 

所以我想你可以分析該字符串,匹配的東西,如「無功」和「功能」,匹配從那時起到「 ;」或「}」

但是,這將是一個非常混亂,蠻力的方法!如果你真的需要得到這種信息,你最好不要創建變量 - 定義每個值和函數作爲對象屬性,然後你可以簡單地遍歷它們(for key)

+1

這將返回調用函數的源代碼,但不會返回名稱空間。 – 2012-02-26 04:36:00

相關問題