1

私は次のシナリオを持っています

次に、次の条件をチェックする関数があります。

var callback = $input.data('callback');
if(callback){
     // I want to do something like this:
     window[callback].call(this);

 }

しかし、名前空間のためにそれを行うことはできません。このシナリオのベストプラクティスは何ですか?

4

2 に答える 2

2

分割し"."、windowで始まる各セグメントを解決し、:で呼び出します()

foo = {
  bar: {
    baz: function() {
      console.log("foo.bar.baz()");
    }
  }
};

"foo.bar.baz".split(".").reduce((o, n) => o[n], window)();

注:簡単にするために、を使用しました。古いブラウザの場合、ポリフィルを利用できます。Array.prototype.reduce()

于 2012-10-11T19:55:35.220 に答える
0
window.foo = {
    bar: function () {
        alert(this.val);
    },
    val: "foobar!"
}

var callback = "foo.bar";

if (callback) {
    var segments = callback.split('.'), 
        context = window;
    for (var i = 0; i < segments.length-1; i++) {
        context = context[segments[i]];
    }
    context[segments[i]]();
}​
于 2012-10-12T12:15:00.253 に答える