2012-10-11 67 views
1

我有以下情形命名空间的回调函数

然后,我有功能,检查下列条件:

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

} 

但我不能这样做,因为命名空间的。这种情况下的最佳做法是什么?在"."

+0

拆分“'。”的回调并向下循环。 – canon

+0

我认为应该有一些更好的方法来做到这一点 – emphaticsunshine

回答

2

分割,解决每段开头的窗口,并与()调用:

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

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

注:为简单起见,我用Array.prototype. reduce()。对于较旧的浏览器,有一个polyfill可用。

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]](); 
}​ 
相关问题