4

使用下面的代码,除了手动指定之外,有没有办法只导出名称不以下划线开头的函数和变量?

var myapp = myapp || {};
myapp.utils = (function() {
  var
    CONSTANT_A = "FOO",
    CONSTANT_B = "BAR";

  function func() {}
  function _privateFunc() {}

  return {//return all variables and functions whose name does not have the "_" prefix.}
}());
4

1 回答 1

6

您的想法需要能够列出本地范围内的所有变量。不幸的是,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
    };
}());

我已经在实践中看到了两者(甚至两者的混合)。第二个可能看起来更迂腐,但也允许读者查看单个代码段并查看该函数返回的整个接口。

于 2013-01-18T22:22:24.097 回答