3

現在、ページの読み込み時にハッシュ値から関数を呼び出す次のコードがあります。

$(function() {
    var hash = window.location.hash.substring(1);
    window[hash]();
});

これはうまくいきます。

ただし、名前空間内の私の Javascript は次のようになります。

    var help = {
            faq: function () {
                //do stuff
            },

            newFeatures: function () {
                //do stuff
            }
    }

上に挙げた私の関数は、名前空間付きの JavaScript では機能しません。名前空間を前に手動で追加しようとしましたvar hash = "help." + window.location.hash.substring(1);が(そう)、うまくいきませんでした。

名前空間から Javascript を削除せずに、この問題を回避するにはどうすればよいですか?

4

3 に答える 3

4

これはうまくいくはずです:

$(function() {
    var hash = window.location.hash.substring(1);
    window.help[hash]();
});

キーが有効な JavaScript 識別子である限り、JavaScript のドット表記と角括弧は交換可能です。(それ以外の場合は、角括弧を使用する必要があります。)

したがって、これを行うこともできます (ドット表記の方が読みやすいですが):

$(function() {
    var hash = window.location.hash.substring(1);
    window["help"][hash]();
});
于 2013-02-28T22:19:17.017 に答える
1

オブジェクト値をハッシュに格納する同様の方法を使用しています。

私のテクニック:

  • ハッシュにドットを使用して階層を表示します - あなたの場合: #help.faq
  • スクリプトを実行してドット表記を変換し、実際の値を取得します

ライブデモ: http://jsfiddle.net/Kn4w2/1/

コードサンプル:

var hashArray=hash.split("."),
    myMethod=window;
for (var i=0;i<hashArray.length;i++){
        myMethod=myMethod[hashArray[i]];
}

唯一の制約は、もちろんメソッド名にドットを含めないことです。

于 2013-02-28T23:06:35.780 に答える
-2

私は本当にファンではありませんが、「eval」はうまくいくかもしれません:

eval(hash + "()");

例: http://jsfiddle.net/pGktd/

于 2013-02-28T22:25:30.633 に答える