如何在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);