最近我问过一个问题
提取并调用元素的onclick HTML属性中定义的JavaScript函数(使用jQuery attr / prop)
我需要以编程方式访问按钮的onclick attrib,该按钮具有函数调用以及其中的param,然后提供额外的参数并进行函数调用( onclick=doSomething(2,4)
)。
但是当我发现使用apply/call
也可以方便地提供额外的param。为此我从属性中提取了函数名称并且它出现在一个字符串中
arr[1] = 'doSomething';
我尝试使用函数构造函数将其视为一个函数,但它不起作用(如Function(arr[1])
)为什么?
解决方案提到Javascript:将字符串解释为对象引用? 工作良好。 但为什么它不能通过函数构造函数实现?
一些代码信息
var funDef ='doSomething'; // this is the name of real function defined in the script var funcName = new Function(funDef); //expected it to return reference of function doSomething,shows function anonymous() in console var funcArgs = [5,7,10]; funcName.apply('',funcArgs); //this is the function call.
在这种情况下,函数不会被调用,直到我替换
var funcName = new Function(funDef); with var funcName = eval(funDef);
谢谢。
new Function
和eval
不可互换。 当您评估时,您正在创建立即运行的代码。 当您创建一个Function
,它将返回一个您可以自己运行的函数。
这几乎就像你做的那样:
// This executes 1+2 var resultOfEval = eval('1+2'); // This creates a function that when called, returns 1+2 var resultOfWrappedEval = eval( '(function(){return 1+ 2})' ); // This is much like the line above, you have to call it for it to execute var resultOfFunctionCtor = new Function('return 1+ 2;'); console.log('resultOfEval', resultOfEval); console.log('resultOfWrappedEval', resultOfWrappedEval); console.log('executing resultOfWrappedEval', resultOfWrappedEval()); console.log('resultOfFunctionCtor', resultOfFunctionCtor); console.log('executing resultOfWrappedEval', resultOfFunctionCtor());
我在JavaScript聊天室讨论了这个,我从中了解到new Function(..)
构造函数需要整个函数体以我期望的方式返回引用。
函数构造函数不考虑eval
在脚本中编写的doSomething
函数的定义。
其他适合这种情况的方法如下:
Javascript使用变量作为对象名称
评论?
需要了解更多jQuery教程分享functionTypecasting JavaScript,都可以关注jQuery技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是jQuery教程分享functionTypecasting JavaScript相关内容,想了解更多jQuery开发(异常处理)及jQuery教程关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/jquerytutorial/981917.html