我看了看这个:
Calling a JavaScript function named in a variable
但它没有回答我的问题。
这通常有效:
window['class']['sub_class']['function_name'](data);
但是现在我正在尝试创建一个可以处理任何深度的通用函数:
function callbackFunction(callback, data){
//callback = a.b.c, or a.b, or a
callback = explode(callback);
//I need to be able to call callbackFunction and somehow callback and form their proper form below
window[callback.a](data);
//or
window[callback.a][callback.b](data);
//or
window[callback.a][callback.b][callback.c](data);
}
答案 0 :(得分:1)
我相信Bergi建议的副本只能解决你问题的一半。由于您的最终值将是一个函数,并且由于该函数是对象的成员,因此您将最终在错误的上下文中执行它(即,使用错误的this
值。)
我建议你使用这样的东西:
function getCallback(path) {
var arr = path.split('.');
var k;
var fn = window;
while(k = arr.shift()) {
if(typeof fn[k] === "function") {
fn = fn[k].bind(fn);
} else {
fn = fn[k];
}
}
if(typeof fn === "function") return fn;
return function(){};
}
将回调中this
的值与使用Convert string in dot notation to get the object reference的答案得到的值进行比较。
答案 1 :(得分:0)
您可以根据需要将引用链接到对象/子对象/等。如果您有一个以点分隔的字符串(例如"document.blah.blah2.method"
),那么您需要将其拆分为单个令牌(例如["document", "blah", "blah2", "method"]
)。
然后,这只是循环链的问题:
var c = window;
for (var i = 0; i < chain.length - 1; i++) {
c = c[chain[i]];
}
c[chain[chain.length-1]](some_arguments);