1
foo = document.getElementById("outer");

function cycleIt() {
    if (client.browser.Firefox) {
        foo.addEventListener("animationend", updateClassName, true);
    } else {
        foo.addEventListener("webkitAnimationEnd", updateClassName, true);
    }
}

function updateClassName() {

    var z = foo.getAttribute("class");

    if ( z == "a" ) {
        foo.className = "b";
    } else if ( z == "b" ) {
        foo.className = "c"
    } else if ( z == "c" ) {
        foo.className = "d"
    } else {
        foo.className = "a"
    }
    return foo;
}

Javascript チャット チャネルで、複数の if then ステートメント用のハッシュ テーブルを作成する必要があると誰かに言われました。どうすればそれについて行くでしょうか?

4

2 に答える 2

5

ハッシュ テーブルを作成します (これは実際には単純なオブジェクトです)。

var table = {
    "a": "b",
    "b": "c",
    "c": "d"
};

z次に、テーブルを使用して入力を出力 (クラス名)にマップします。

var z = foo.getAttribute("class");
foo.className = table[z] || "a";
return foo;

構文table[z] || "a"は簡単な書き方です

if (table[z] === undefined) {
    foo.className = "a";
}
else {
    foo.className = table[z];
}

2 つのスタイルは完全に同等ではありませんが、この場合 (ハッシュ内のすべての値が文字列であり、いずれも空の文字列ではない)、同じように機能します。

于 2012-08-17T23:36:52.737 に答える
1

z次のように、値をクラス名にマップします。

function updateClassName() {
    foo.className = ({
        a: "b",
        b: "c",
        c: "d"
    })[foo.className] || "a";
    return foo;
}

オブジェクト リテラルは、どの古い値 (キー) がどの新しい値 (値) に移動するかを指定するマップです。さらに、|| "a"デフォルトのケースを指定するために使用します。

于 2012-08-17T23:37:38.517 に答える