2013-01-13 82 views
0

我有一個想法,使一個Web窗體接收一個對象名稱並輸出其所有屬性。爲了做到這一點,我寫了下面的代碼段:如何將字符串轉換爲JavaScript中的對象?

var html5form = document.getElementsByClassName("html5_form"); 
html5form[0].onsubmit = function (e) { 
    var val = e.target.querySelector("input[name=obj]").value, 
     obj = window[val], 
     enumObj = new obj();    
    for (prop in enumObj) {     
     console.log(prop); 
    } 
    return false; 
} 

我與對象構造一個數據列表,並將其附加到輸入域。但我實際上迭代對象實例,而不是構造函數。上面提到的代碼只在我輸入像DataView和ArrayBuffer這樣的構造函數時才起作用,並且不適用於Array,Number等等。我的代碼有什麼問題?我試過調試,但沒有結果。

回答

0

不知道這是否是你想要做

window.myObject = function(){}; 

var objectName = 'myObject'; 
var objectInstance = new window[objectName]; 

objectInstance現在包含的myObject

實例在另一方面,如果你的對象是一個簡單的對象字面,你不應該使用什麼new關鍵字。

window.myObject = {}; 

var objectName = 'myObject'; 
var objectReference = window[objectName]; 
1

JavaScript沒有像您想要的那樣標量/圖元的對象。有拳擊,但就是這樣。

當你使用一個字符串對象的方法時,例如'text'.method()(6).toString(),對字符串對象的字符串基元的裝箱會自動發生。但是,我知道沒有辦法在沒有檢查數據類型的情況下自動返回盒裝值,然後自己選擇正確的轉換(我甚至不確定這是否是最佳實踐)。而且,如果你打算這樣做的話,你也可以改變你的函數來正確處理原語。

另外,它會給你帶來什麼?假設你得到一個String對象。您希望列舉哪些屬性?我知道的唯一屬性不是屬性,但在盒裝對象原型的方法中,可以使用this引用 - 它將返回標量值。

問題是,您期待像NumberString這樣的對象具有屬性並像其他對象一樣操作,但它們不會並且不是。

+0

謝謝!你的意思是我應該檢查每個對象名稱並根據該名稱創建一個對象? – paperstreet7

+0

不是。基元不完全具有普通對象和可枚舉屬性。 – ErikE

相關問題