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)();

注意:为简单起见,我使用了. 对于较旧的浏览器,有一个polyfill可用。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 回答