当函数名称为字符串时,如何调用函数并传递参数?

时间:2017-03-29 10:38:15

标签: javascript jquery angularjs

如果将函数名称作为字符串,如何调用函数? e.g。

$scope.ExecuteFunction = function (func,val) {
  // here func="GetActivityInfo" and val="ERF000000000A6543"
  // How to Invoke function named in variable func and pass val as parameter ?
  // GetActivityInfo(val) to be invoked.
}

var GetActivityInfo = function (elementId) {
  // some code       
};

4 个答案:

答案 0 :(得分:1)

如果该功能在window范围内,您可以使用此功能:

window[func](val);

答案 1 :(得分:0)

您可以使用 $(document).ready(function(){ $("button").click(function(){ $("div").scrollLeft(30); }); }); 来实现它,

apply() or call() 此行应添加

定义:

--->使用var test = func.apply(test,val);call(),您可以设置apply()的值,并调用this作为现有对象的新方法。

functioncall()之间的差异:

---> call()分别获取函数参数,apply()接受数组中的函数参数。

apply()

请运行以上代码段

答案 2 :(得分:0)

请确保您没有参数中的括号,请在浏览器控制台中尝试以下内容:

function addUser(id, callback) {
    callback(id);
}

function callback(id) {
    alert(id);
}

addUser(1, callback);

答案 3 :(得分:0)

GetActivityInfo是其父函数的私有属性。它只能由closure访问。 property accessor无法访问它。它需要成为可访问对象的属性:

var accessibleObj = { GetActivityInfo: GetActivityInfo };

$scope.ExecuteFunction = function (func,val) {
  // here func="GetActivityInfo" and val="ERF000000000A6543"
  // How to Invoke function named in variable func and pass val as parameter ?
  // GetActivityInfo(val) to be invoked.
  accessibleObj[func](val);
}

//var GetActivityInfo = function (elementId) {
function GetActivityInfo (elementId) {
  // some code       
};

在上面的示例中,私有变量(初始化为匿名函数)已更改为私有函数,因此它可以是hoisted