我正在努力动态创建一些JavaScript,它将被插入到正在构建的网页中。
该JavaScript将用于根据在另一个listbox
中选择的内容填充listbox
。当一个listbox
的选择发生变化时,它将根据listbox
的选定值调用一个方法名。
例如:
Listbox1
包含:
Colours
Shapes
如果选择了Colours
,那么它将调用一个填充另一个listbox
的populate_Colours
方法。
为了澄清我的问题:如何在JavaScript中调用populate_Colours
?
发布于 2009-06-09 12:22:03
假设populate_Colours
方法位于全局命名空间中,您可以使用以下代码,该代码既利用了可以像访问关联数组一样访问所有对象属性,又利用了所有全局对象实际上都是window
宿主对象的属性。
var method_name = "Colours";
var method_prefix = "populate_";
// Call function:
window[method_prefix + method_name](arg1, arg2);
发布于 2009-06-09 12:51:28
正如Triptych所指出的,您可以通过在宿主对象的内容中找到任何全局作用域函数来调用它。
一种更简洁的方法,它对全局名称空间的污染要小得多,就是显式地将函数直接放入一个数组中,如下所示:
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库(如jQuery )一样有效地创建自己的名称空间。如果在同一页面中包含多个单独的实用程序库,并且(设计的其他部分允许)可以更容易地在其他页面中重用代码,这将有助于减少冲突。
你也可以像这样使用一个对象,你可能会发现它更干净:
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文字表示法进一步减少非动态内容的任何方法的语法,如下所示:
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
编辑:当然,对于更大的功能块,您可以将上面的扩展到非常常见的“模块模式”,这是一种以有组织的方式封装代码特性的流行方式。
发布于 2018-01-20 17:26:25
为此,我建议使用而不是来使用global
/ window
/ eval
。
相反,可以这样做:
将所有方法定义为Handler的属性:
var Handler={};
Handler.application_run = function (name) {
console.log(name)
}
现在这样叫它
var somefunc = "application_run";
Handler[somefunc]('jerry');
输出: jerry
从不同文件导入函数时的情况
import { func1, func2 } from "../utility";
const Handler= {
func1,
func2
};
Handler["func1"]("sic mundus");
Handler["func2"]("creatus est");
https://stackoverflow.com/questions/969743
复制相似问题