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