2012-12-23 45 views
0

我有一個對象叫做Button_Objs,它的目的是保存我所有的Button對象。我在我的Button_Objs中做了一個函數,它遍歷每個變量。這裏是問題的地方,我有一個if statement說:if (i typeof Button){}。我這樣做,所以它只選擇存儲的對象Button發現對象中的所有變量

下面是這個的jsfiddle:http://jsfiddle.net/MichaelMitchell/vcZTR/15/

var Button_Objs = function() { 
    this.getButtons = function() { 
     var i; 
     for (i in this) { 
      if (type of i == Button) { //PROBLEM, also does not work with instanceof. 

       document.getElementById('console').innerHTML += ("button: " + i + "<br />"); 

      } 
     } 
    }; 
}; 

我也試過instanceof,但可惜它不會工作:(

回答

2

i typeof Button是無效的語法和type of i == Button以及

當。你使用一個for...in循環遍歷一個對象,循環變量將保存屬性的名稱,而不是值。您可以使用名稱來獲取值:

if(this[i] instanceof Button) 

Read more about the for...in loop(我建議看看MDN瞭解JS基礎知識)。


除此之外,我不明白爲什麼你需要一個構造函數來爲你的按鈕創建一個容器。你可以只使用一個普通的對象:

var buttons = {}; 

// somewhere 
buttons['button' + i] = new Button(...); 

,然後再次使用for...in循環遍歷對象。

如果你實際上並不需要這些名字(它們只是某種枚舉),爲什麼不使用數組呢?

var buttons = []; 

// somewhere 
buttons.push(new Button(...)); 

然後使用for循環遍歷所有按鈕。你甚至不需要測試他們的類型。

+0

是的,我認爲它只是返回名稱。謝謝,關於JSFiddle,我不知道發生了什麼,我有它適當的語法,然後我愚蠢的一切:/ – MichaelMitchell

+0

嗯,如果我想要'爲...在'循環做這個對象的東西,爲什麼我應該把它放在它之外? – MichaelMitchell

+0

我的意思是你不需要'Button_Objs'和一個方法來提取按鈕列表,如果你可以直接使用一個數組來實現相同的代碼較少。只是一個建議。 –