0

というオブジェクトがあります。Button_Objsその目的は、すべてのButtonオブジェクトを保持することです。Button_Objs各変数を反復処理する関数を my に作成しました。ここに問題があります。次の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ましたが、残念ながらうまくいきません:(

4

1 に答える 1

2

i typeof Buttonは無効な構文type of i == Buttonです。

ループを使用for...inしてオブジェクトを反復処理する場合、ループ変数は値ではなくプロパティの名前を保持します。名前を使用して値を取得できます。

if(this[i] instanceof Button)

for...inループの詳細を読んでください(JS の基本について学ぶために MDN を参照することをお勧めします)。


これとは別に、ボタンのコンテナーを作成するためにコンストラクター関数が必要な理由がわかりません。単純なオブジェクトを使用できます。

var buttons = {};

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

次に、for...inループを使用してオブジェクトを反復処理します。

そして、実際に名前が必要ない場合 (それらはある種の列挙のように見えるだけです)、なぜ配列を使用しないのでしょうか?

var buttons = [];

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

次に、forループを使用してすべてのボタンを繰り返し処理します。それらのタイプをテストする必要さえありません。

于 2012-12-23T10:48:40.867 に答える