首页 > 解决方案 > 为什么我不能调用使用 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

显然,我的函数正在工作,但是当我添加()并尝试给它一个参数时,它没有工作。

我做错了什么?

标签: javascriptvue.js

解决方案


当您myFnc()在代码的最后一行调用时,您不传递参数,因此value未定义。

然而,您生成了一个引用的函数对象value

try{ return value.toLowerCase(); } catch (e) { return "error"; }

undefined不是对象,因此对的引用会toLowerCase()触发错误。


推荐阅读