2012-08-22 42 views
1

我正在編寫一個JavaScript實用程序,它允許用戶在運行時檢測特定的對象/函數是否可用。這裏是源代碼,這工作,但它需要編輯要測試另一個對象每次:JavaScript將字符串解析爲等效對象

<!DOCTYPE html> 
<html> 
    <head> 
     <title>HTML5 Template</title> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $('#TestObject').click(function() { 
        alert(typeof(HTMLCollection)); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <input id="ObjectType" type="text" /> 
     <input id="TestObject" type="button" value="Test" /> 
    </body> 
</html> 

當單擊該按鈕,它會顯示一個警告,指示「對象」或「功能」,如果該項目存在,如果不存在則爲「未定義」。

我想要的是有一個文本框<input id="ObjectType" type="text" />,我可以在其中輸入要測試的對象,然後單擊該按鈕進行測試,這將消除編輯文檔的需要。這可能嗎?是否有類似於我可以使用的反射?

回答

3

由於JavaScript對象屬性實際上是關聯的鍵值對,所以這是可能的,這意味着obj.property等於obj['property']

將此應用於您的問題,下面的代碼將工作:

alert(typeof(window[$('#ObjectType').val()])); 

這工作,因爲所有的「全局」變量,實際上是window對象的屬性。

1

通過執行window[className],您可以從字符串類名獲取對象。我們將使用從輸入文本框中得到一個類名的字符串值,從類名中獲取對象,並調用的typeof反對:

保持你的代碼相同的只是alert(typeof(window[$("#ObjectType").val()]));

更換 alert(typeof(HTMLCollection));