命名空间回调函数

时间:2012-10-11 19:46:13

标签: javascript jquery callback

我有以下情景

然后我有检查以下条件的功能:

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

 }

但由于命名空间,我无法做到这一点。这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

"."上拆分,解析以窗口开头的每个细分,然后使用()调用:

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

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

注意:为简单起见,我使用了Array.prototype.reduce()。对于旧版浏览器,可以使用polyfill

答案 1 :(得分: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]]();
}​
相关问题