繁体   English   中英

当我将其名称作为字符串时执行 JavaScript 函数 - 不工作

[英]Execute a JavaScript function when I have its name as a string - Not working

我需要通过 var 字符串调用函数。 我看到之前有人问过这个问题: How to execute a JavaScript function when I have its name as a string

但解决方案不起作用。 我做错了什么吗? https://jsfiddle.net/puLh9keg/

// a.callThis is the function that will be called using var string
var a = {
  callThis:
     function (ok, param1, param2) {
            alert(ok + "|" + param1 + "|" + param2);
        }
}

// Below is from https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string 
function executeFunctionByName(functionName, context /*, args */) {
  var args = [].slice.call(arguments).splice(2);
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i++) {
    context = context[namespaces[i]];
  }
  return context[func].apply(context, args);
}


// try call a.callThis by var string
var fn = 'a.callThis';
executeFunctionByName(fn, window, true, 'param1', 'param2');

您的代码按编写的方式工作。 正如多人在评论中提到的,您的 JSFiddle 不起作用的原因是您假设window是您正在操作的全局范围。 但是,您已将 JSFiddle JavaScript 设置为运行onLoad 这将它包装在一个onload处理程序中。 因此,与您的假设相反,您的代码没有以window作为全局范围运行,这使其无法正常工作。 您可以通过将 JavaScript LOAD TYPE选项更改为No wrap - in <head>No wrap - in <body> -in No wrap - in <body>来让您的代码在 JSFiddle 上工作。

这是一个实现了该更改JSFiddle

此外,下面是您的代码片段,它运行良好。

 // a.callThis is the function that will be called using var string var a = { callThis: function (ok, param1, param2) { alert(ok + "|" + param1 + "|" + param2); } } // Below is from // http://stackoverflow.com/questions/359788 // /how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string function executeFunctionByName(functionName, context /*, args */) { var args = [].slice.call(arguments).splice(2); var namespaces = functionName.split("."); var func = namespaces.pop(); for(var i = 0; i < namespaces.length; i++) { context = context[namespaces[i]]; } return context[func].apply(context, args); } // try call a.callThis by var string var fn = 'a.callThis'; executeFunctionByName(fn, window, true, 'param1', 'param2');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM