0

変数に格納されている名前から関数を作成する必要があります。通常、これは非常に簡単です。使用する前に実行しました。

  var funcName = "theName";
  window[funcName] = function(){
    // code here
  };

ただし、新しいユースケースでは、作成する関数は。というオブジェクト内に配置する必要がありますthe.Name。だから私がやろうとしたのですが、うまくいきません:

  var funcName = "the.Name";
  window[funcName] = function(){
    // code here
  };

それが機能しない理由は、それが無効であるために参照できないためです。window["the.Name"]正しい方法はwindow["the"]["Name"]です。

誰かがこの問題の解決策を持っていますか?基本的に、名前が変数に格納されているときにオブジェクト内に配置される関数に名前を付けます。

4

4 に答える 4

2

OK、私はあなたの問題を理解しているようです。

開始するためのコードを次に示します。

/**
 * @param fn The function to bind.
 * @param path The object to bind to.
 * @param root The root object.
 */
function bindFunc(fn, path, root){
    path = path.split('.');
    var base = root;
    for(var i=0; i<path.length-1; i++){
        base = base[path[i]];
    }
    base[path[path.length - 1]] = fn;
}

bindFunc(function(){  }, 'the.Name', window);
于 2012-07-15T16:54:05.043 に答える
1

「名前空間のような」ことをしようとしていると推測します。これはあなたが始めるための記事です(いくつかの良いサンプルコードもあります)..

http://blogger.ziesemer.com/2008/05/javascript-namespace-function.html

于 2012-07-15T16:58:09.403 に答える
1

最後のオブジェクトまでのすべてのオブジェクトが存在することが確実な場合 (最後のオブジェクトも定義できませんでした)、最短の方法はおそらくreduceを使用することです

var func = funcName.split(".").reduce(function(p, c) {
    return p[c];
}, window);
于 2012-07-15T17:14:44.823 に答える
0

一度に 1 つのレベルを参照できるように文字列を分割します。

var names = funcname.split(".");
var f = window;
for (var i = 0; i < names.length - 1; i++) {
  f = f[names[i]];
}
f[names[names.length - 1]] = function(){...};
于 2012-07-15T16:56:59.527 に答える