簡體   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