2013-03-24 55 views
1

暈人..我在這個網站很新,所以任何幫助,將不勝感激。請讓我知道如果我的問題已經存在於另一個話題中。我有以下問題..我創建了另一個對象的對象。子對象具有一些屬性。每當我迭代子對象獲取屬性,似乎所有屬性都是字符串類型的..以下是我的代碼:我無法獲得對象屬性作爲功能

var obj = {} 
    obj.x = function(){ 
     this.y = function(){ 

     } 
    } 

    for(var a in obj){ 
     alert(typeof(a) === "string"); //this will be true 
     alert(a.hasOwnProperty("y")); //this will be false 
    } 

我使用Chrome測試此。不應該是typeof(a)===「函數」是真的,並且a.hasOwnProperty(「y」)也是正確的? 我在這裏看不到我的錯誤。我很迷茫..有什麼想法?

回答

0

obj.x是一個功能,如果你想使用的功能作爲一個對象的構造嘗試

obj.x = new (function(){ 
    this.y = function(){ 

    } 
})(); 

也是你的測試是錯誤的,a只是一個字符串,以便ofcourse它不會有一個y屬性。

for(var a in obj){ 
    alert(typeof(obj[a]) === "object"); 
    alert(obj[a].hasOwnProperty("y")); 
} 
+0

感謝您的回覆。 :D ..我剛剛編輯我的問題..不應該是typeof(a)===「功能」是真實的,而且a.hasOwnProperty(「y」)也是如此? – 2013-03-24 19:26:44

+0

'a'是一個屬性(或鍵),所以它只能是一個字符串或一個數字。 – Musa 2013-03-24 19:29:28

+0

這工作輝煌!謝啦!上帝保佑! :D – 2013-03-24 19:33:09

0
for(var a in obj){ 
     alert(typeof(a) === "string"); //this will be true 
} 

對於...在循環在JavaScript遍歷一個對象,而不是屬性本身的屬性名稱。所以a將返回每個屬性的名稱,這將永遠是字符串

在您的例子OBJ有一個屬性x,所以循環將a等於"x"

如果你想遍歷性運行一次的對象,你可以這樣做

for(var a in obj){ 
    var property = obj[a]; 
     alert(typeof(property) === "string"); //this will be false 
} 
+0

是的..我發現我的錯誤。非常感謝! :) – 2013-03-24 19:34:33