如何将事件与定义为字符串的函数名关联起来?
我使用的是Prototype.js,尽管这不是原型专用的。
$(inputId).observe('click', formData.fields[x].onclick);
这将导致JavaScript抱怨我的处理程序不是一个函数。我不希望我们使用eval()
。
发布于 2009-01-30 19:53:53
Property accessors可用于访问任何对象的属性或函数。
如果该函数在全局作用域中,则可以使用window对象获取它:
var myFunc = window[myFuncName];
这也适用于this
作用域:
var myFunc = this[myFuncName];
发布于 2010-10-26 19:19:25
我已经解决了这个问题,因为我需要一个这样的函数。这是我的沙箱代码,没有经过彻底的测试,但可以作为其他人的起点。注意,在代码中有一个eval(),因为我不知道如何绕过这一步,可能是javascript的怪癖,并且不能用任何其他方式来完成。如果有办法在这里去掉eval(),请告诉我!
executeFunctionByName = function(functionName)
{
var args = Array.prototype.slice.call(arguments).splice(1);
//debug
console.log('args:', args);
var namespaces = functionName.split(".");
//debug
console.log('namespaces:', namespaces);
var func = namespaces.pop();
//debug
console.log('func:', func);
ns = namespaces.join('.');
//debug
console.log('namespace:', ns);
if(ns == '')
{
ns = 'window';
}
ns = eval(ns);
//debug
console.log('evaled namespace:', ns);
return ns[func].apply(ns, args);
}
core = {
paragraph: {
titlebar: {
user: "ddd",
getUser: function(name)
{
this.user = name;
return this.user;
}
}
}
}
var testf = function()
{
alert('dkdkdkd');
}
var x = executeFunctionByName('core.paragraph.titlebar.getUser', 'Ikon');
executeFunctionByName('testf');
发布于 2009-01-30 19:57:58
..。或thismyFuncName;
https://stackoverflow.com/questions/496961
复制相似问题