您的想法需要能够列出本地范围内的所有变量。不幸的是,JavaScript 无法做到这一点。请参阅此相关问题。
我见过有两种方法可以做到这一点:
1)将每个变量定义到要导出的对象时附加:
var myapp = myapp || {};
myapp.utils = (function () {
var exports = {};
exports.CONSTANT_A = "FOO",
exports.CONSTANT_B = "BAR";
exports.func = function func() {}
function _privateFunc() {}
return exports;
}());
2)或者在对象文字的末尾列出所有导出:
var myapp = myapp || {};
myapp.utils = (function () {
var
CONSTANT_A = "FOO",
CONSTANT_B = "BAR";
function func() {}
function _privateFunc() {}
return {
CONSTANT_A: CONSTANT_A,
CONSTANT_B: CONSTANT_B,
func: func
};
}());
我已经在实践中看到了两者(甚至两者的混合)。第二个可能看起来更迂腐,但也允许读者查看单个代码段并查看该函数返回的整个接口。