如何在Javascript中调用dynamic命名的方法?

我正在dynamic地创build一些Javascript,将被插入到一个网页,因为它正在构build。

Javascript将被用来根据另一个列表框中的select填充一个列表框。 当一个列表框的select被改变时,它将根据列表框的选定值调用一个方法名称。

例如:

Listbox1包含:

颜色
形状

如果select“颜色”,则会调用填充另一个列表框的“populate_Colours”方法。
澄清我的问题:我如何使用Javascript中的“populate_Colours”调用?

假设“populate_Colours”方法位于全局名称空间中,则可以使用下面的代码,该代码利用了所有的对象属性都可以被访问,就像对象是一个关联数组一样,并且所有的全局对象实际上是window主机的属性目的。

 var method_name = "Colours"; var method_prefix = "populate_"; // Call function: window[method_prefix + method_name](arg1, arg2); 

正如三联指出的,你可以通过在宿主对象的内容中find全局作用域函数来调用它。

一个更清洁的方法,更不用说污染全局名称空间,就是直接把函数直接放到一个数组中,像这样:

 var dyn_functions = []; dyn_functions['populate_Colours'] = function (arg1, arg2) { // function body }; dyn_functions['populate_Shapes'] = function (arg1, arg2) { // function body }; // calling one of the functions var result = dyn_functions['populate_Shapes'](1, 2); // this works as well due to the similarity between arrays and objects var result2 = dyn_functions.populate_Shapes(1, 2); 

这个数组也可以是全局宿主对象以外的某个对象的一个​​属性,这意味着你可以像jQuery那样有效地创build自己的命名空间。 如果/在同一页面中包含多个单独的实用程序库,并且(您的devise的其他部分允许)可以更容易地在其他页面中重新使用代码时,这对减less冲突很有用。

你也可以使用像这样的对象,你可能会发现更清洁:

 var dyn_functions = {}; dyn_functions.populate_Colours = function (arg1, arg2) { // function body }; dyn_functions['populate_Shapes'] = function (arg1, arg2) { // function body }; // calling one of the functions var result = dyn_functions.populate_Shapes(1, 2); // this works as well due to the similarity between arrays and objects var result2 = dyn_functions['populate_Shapes'](1, 2); 

请注意,无论是数组还是对象,都可以使用设置或访问函数的方法,也可以在其中存储其他对象。 你可以通过使用JS文字符号来进一步减less任何一个不属于synamic的方法的语法:

 var dyn_functions = { populate_Colours:function (arg1, arg2) { // function body }; , populate_Shapes:function (arg1, arg2) { // function body }; }; 

编辑:当然,对于更大的function块,您可以将上述内容扩展到非常常见的“模块模式”,这是一种以有组织的方式封装代码function的stream行方式。

你可以这样做:

 function MyClass() { this.abc = function() { alert("abc"); } } var myObject = new MyClass(); myObject["abc"](); 

嗨,试试这个,

  var callback_function = new Function(functionName); callback_function(); 

它将处理参数本身。

对于一个简单的javascript函数,我们可以使用 –

 var function_name='additionFunction'; var argMap={"name":"yogesh"}; var argArray=[{"name":"yogesh"}]; window[function_name](argMap); 

要么

 window[function_name](argArray); 

要么

 window[function_name](argMap,argArray); 

提供所谓的函数存在,在实际实现中有这样的参数。

试试这个:

 var fn_name = "Colours", fn = eval("populate_"+fn_name); fn(args1,argsN);