如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
};
};
编辑:当然,对于更大的功能块,您可以将以上内容扩展为非常常见的“模块模式”,这是一种以有组织的方式封装代码功能的流行方法。