javascript - 为什么我不能调用使用 Function() 构造函数创建的函数?
问题描述
我在调用函数时使用函数内部的函数构造函数来创建函数
这是我的构造函数
funcGenerator(f) {
return new Function(
"value",
"try{ return " + f + '; } catch (e) { return "error"; }'
);
},
我这样调用函数生成器(在另一个函数内部)
testFnc() {
... //content
}
在里面,我调用了生成器:
var myFnc = this.funcGenerator('value.toLowerCase()');
但是现在,当我试图给它一个value
这样的参数时
var textLow = myFnc('THIS to loWeR');
它没有用。我试图console.log
看看是否有任何问题,这是我的结果:
console.log(myFnc); //Display the function so this part works apparently
console.log(textLow); //Result is undefined
console.log(myFnc()); //Result is error
显然,我的函数正在工作,但是当我添加()
并尝试给它一个参数时,它没有工作。
我做错了什么?
解决方案
当您myFnc()
在代码的最后一行调用时,您不传递参数,因此value
未定义。
然而,您生成了一个引用的函数对象value
:
try{ return value.toLowerCase(); } catch (e) { return "error"; }
但undefined
不是对象,因此对的引用会toLowerCase()
触发错误。
推荐阅读
- javascript - 如何加载表格使用 HTML/JS 在按钮上单击
- python - 从 csv 文件计算每一行的方差
- mips - 第 1 行 MIPS64 错误
- django - django 项目的通知功能
- cartodb - Torque.js 使用私有数据集可视化 CartDB 命名地图
- r - 自定义分类阈值轴在 R 中以连续比例中断
- wordpress - 将 Wordpress 安全性扩展到不相关的目录
- android - 在 Android Studio 中为 android 构建 Chromium 时出错
- python - 创建一个 Spark 数据框,其中只有一列的数字从 1 到 100 万
- javascript - chart.js 库 Y 轴的最小步长