函数类型转换 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 Function
和 eval
不可互换。评估时,您正在创建立即 运行 的代码。当您创建一个 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
评论?
最近问了一个问题
我需要以编程方式访问按钮的 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 Function
和 eval
不可互换。评估时,您正在创建立即 运行 的代码。当您创建一个 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
评论?