使用字符串调用JavaScript函数名?
如何将事件连接到已定义为字符串的函数名 我使用的是Prototype.js,虽然这不是Prototype的特殊功能使用字符串调用JavaScript函数名?,javascript,Javascript,如何将事件连接到已定义为字符串的函数名 我使用的是Prototype.js,虽然这不是Prototype的特殊功能 $(inputId).observe('click', formData.fields[x].onclick); 这将导致JavaScript抱怨我的处理程序不是函数。我不希望我们使用eval()可以用来访问任何对象的属性或函数 如果函数在全局范围内,则可以使用窗口对象获取它: var myFunc = window[myFuncName]; 这也适用于此范围: var myF
$(inputId).observe('click', formData.fields[x].onclick);
这将导致JavaScript抱怨我的处理程序不是函数。我不希望我们使用eval()
可以用来访问任何对象的属性或函数
如果函数在全局范围内,则可以使用窗口对象获取它:
var myFunc = window[myFuncName];
这也适用于此
范围:
var myFunc = this[myFuncName];
。。。或者这个[我的名字] 看起来像
formData.fields[x]。onclick
保存全局函数的名称?如果是,请尝试:
$(inputId).observe('click', window[formData.fields[x].onclick]);
您知道onclick属性包含什么或它是什么类型吗?我假设这是特定于原型的东西,因为DOM表单中不存在“字段”。我已经解决了这个问题,因为我需要这样的函数。这是我的沙盒代码,没有经过彻底测试,但可以作为其他人的起点。 请注意,代码中有一个eval(),因为我不知道如何绕过该步骤,这可能是javascript的一个怪癖,无法通过任何其他方式完成。让我知道这里是否有摆脱eval()的方法 也许吧
setTimeout ( "myFunc()", 1 );
只要一次
eval
就可以了
var call = eval("method_name").call(args);
如果需要使用参数调用字符串函数,请执行以下操作:
window[stringFunctionName].apply( window, arrayOfArguments )
如果愿意,您可以使用范围
代替窗口
,更新:---
使用ES6导出和导入
a、 js
b、 js
(过时功能)eval('str')
setTimeout('str')
setInterval('str')
(但有时,全局对象不是window)window['str']
新函数('str')
- 切换…案例(或如果…其他)
- 将函数放入对象中
const fn={ str1:fn1, str2:fn2 //and so on } fn[str1] //call function
var func=window;对于(var i=0;iThanks Ikon。我尝试了很多方法,这个答案会解决我的问题。可能是太棒了!这成功了…谢谢;你忘了。介于两者之间。var call=eval(“mathod_name”)。call(args);
window[stringFunctionName].apply( window, arrayOfArguments )
const fn = {
aaa: function() {
//code
},
bbb: function() {
//code
},
//codes ....
nnn: function() {
//code
}
}
export default fn
import someFn from './a'
//eg
const str1='aaa'
const str2 = 'bbb'
someFn[str1]()
switch(str){
case 'str1':
fn1()
break
case 'str2':
fn2
//and so on
}
const fn={
str1:fn1,
str2:fn2
//and so on
}
fn[str1] //call function