如何调用字符串中包含的函数?

时间:2018-01-19 16:15:45

标签: javascript angularjs

我有一个已定义的功能。

Calculator

我有一个名为$scope.myFunction=function(){ alert("works") } 的变量,它包含一个函数字符串。

$scope.myVar

如何直接从定义的函数($scope.myVar="myFunction()"; )中的变量($scope.myVar)和而不是调用函数?

类似的东西:

$ scope.myVar();

这是我的代码..

http://jsfiddle.net/o0tuvyt2/

$scope.myFunction

5 个答案:

答案 0 :(得分:2)

你可以eval。这会尝试将字符串的内容解析为可执行的javascript:

eval($scope.myVar);

答案 1 :(得分:1)

您可以使用窗口上下文来调用您的函数:

window[$scope.myVar](arguments);

不要使用eval 。这非常不安全。

完整的工作示例(带参数和范围):



$scope = {};
$scope.myFunction=function(text){
 alert(text);
}

$scope.myVar="myFunction";
$scope.myArgs="great job";


$scope[$scope.myVar]($scope.myArgs);




此处有更多详情:https://stackoverflow.com/a/359910/7415107

答案 2 :(得分:1)

正如大家所说,eval非常不安全,但是,如果你真的需要使用它,那么如果你使用角度版本会更好,因为它会评估你在当前$scope上的表达式

$scope.$eval($scope.myVar)

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$eval

答案 3 :(得分:0)

人们倾向于跳转到eval,但Function构造函数通常是更好的解决方案。

无论哪种方式,在您的用例中总体上可能有更好的解决方案。从模板中评估JS通常是禁止的,除非是模板化。在实施任何内容之前,我建议您考虑一下您尝试解决的情况,并努力以不同的方式看待它。通常,更好的解决方案的第一步是意识到您可以从不同的角度看待问题。



$scope = {};
$scope.myFunction=function(){
 alert("works")
}

    $scope.myVar= new Function("$scope.myFunction()")();




答案 4 :(得分:0)

与此类似的问题已经发布。

Calling a JavaScript function named in a variable

如果你仔细阅读这篇文章,你就会明白为什么不应该使用eval。