函数类型转换 JavaScript

Function Typecasting JavaScript

最近问了一个问题

我需要以编程方式访问按钮的 onclick 属性,该按钮具有函数调用和其中的参数,然后提供额外的参数并进行函数调用(onclick=doSomething(2,4))。

但是当我发现 apply/call 的使用也可以方便地提供额外的参数's.For 我从属性中提取了函数名称并且它以字符串形式出现

arr[1] = 'doSomething';

我尝试使用 Function Constructor 将其视为一个函数,但它不起作用 (喜欢Function(arr[1]))为什么?

提到的解决方案 Javascript: interpret string as object reference? 工作正常。但是为什么不能通过构造函数实现呢?

一些代码信息

 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 Functioneval 不可互换。评估时,您正在创建立即 运行 的代码。当您创建一个 Function 时,它会 return 一个您可以 运行 自己的函数。

这几乎就像你做的那样:

// 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());

如果您展示更多代码,我们可以提出一些建议,但关键是调用 Function 构造函数时,代码不会立即 运行,它 return 是对新创建的功能。

还有,你好像明白了,你可以自己调用函数。这样做有什么问题?

我在 JavaScript 聊天室讨论了这个问题,从那里我了解到 new Function(..) 构造函数需要整个函数体以 return 以我期望的方式引用。

函数构造函数不考虑脚本中编写的 doSomething 函数的定义,而 eval 考虑。

适用于这种情况的其他方式如下:

Javascript use variable as object name

评论?