我需要从存储在变量中的名称创建一个函数。通常这很简单,我在使用之前已经完成了:
var funcName = "theName";
window[funcName] = function(){
// code here
};
然而,在我的新用例中,我创建的函数需要位于名为the.Name
的对象中。所以我试图做的,它不起作用是:
var funcName = "the.Name";
window[funcName] = function(){
// code here
};
它不起作用的原因是因为我无法引用window["the.Name"]
因为它无效,正确的方法是window["the"]["Name"]
。
有没有人有这个问题的解决方案?基本上命名一个函数,当名称存储在变量中时,该函数将位于对象内。
答案 0 :(得分:2)
好的,我似乎理解你的问题。
以下是一些可以帮助您入门的代码。
/**
* @param fn The function to bind.
* @param path The object to bind to.
* @param root The root object.
*/
function bindFunc(fn, path, root){
path = path.split('.');
var base = root;
for(var i=0; i<path.length-1; i++){
base = base[path[i]];
}
base[path[path.length - 1]] = fn;
}
bindFunc(function(){ }, 'the.Name', window);
答案 1 :(得分:1)
我要猜测你正在尝试做一些“类似命名空间”的事情。这篇文章应该让你入门(也有一些很好的示例代码)..
http://blogger.ziesemer.com/2008/05/javascript-namespace-function.html
答案 2 :(得分:1)
如果您确定直到最后一个对象存在的所有对象(最后一个对象也无法定义),最短的方法可能是使用reduce
var func = funcName.split(".").reduce(function(p, c) {
return p[c];
}, window);
答案 3 :(得分:0)
拆分字符串,以便您可以一次引用一个级别:
var names = funcname.split(".");
var f = window;
for (var i = 0; i < names.length - 1; i++) {
f = f[names[i]];
}
f[names[names.length - 1]] = function(){...};