使用字符串调用JavaScript函数名?

使用字符串调用JavaScript函数名?,javascript,Javascript,如何将事件连接到已定义为字符串的函数名 我使用的是Prototype.js,虽然这不是Prototype的特殊功能 $(inputId).observe('click', formData.fields[x].onclick); 这将导致JavaScript抱怨我的处理程序不是函数。我不希望我们使用eval()可以用来访问任何对象的属性或函数 如果函数在全局范围内,则可以使用窗口对象获取它: var myFunc = window[myFuncName]; 这也适用于此范围: var myF

如何将事件连接到已定义为字符串的函数名

我使用的是Prototype.js,虽然这不是Prototype的特殊功能

$(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['str']
    (但有时,全局对象不是window)

  • 新函数('str')

由于某些原因,以上这些方法通常不被推荐,但它们确实很方便使用。 下面这些方法是安全的,但实际上不便于使用

  • 切换…案例(或如果…其他)

  • 将函数放入对象中

    const fn={
        str1:fn1,
        str2:fn2
        //and so on
    }
    fn[str1] //call function
    

…或作用域[myFuncName]通常是这样,只要你在某个地方有作用域的句柄,这就行了。这救了我的命。非常感谢。在Node.js模块中有没有办法做到这一点?要摆脱eval,您可以从window对象导航名称空间:
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