在另一个模块中重用私有jQuery函数

时间:2015-02-09 21:35:21

标签: javascript jquery

背景

我将jQuery代码组织在单独的文件中,保存像这样的虚拟对象文字:

$(function() {
    'use strict';

    // Example feature module
    function featureOne() {

        var privateVar = 0;

        function foo() {
            bar(privateVar);
        }

        function bar(n) {
            console.log(n);
        }

        return {
            foo: foo
        };

    }

    var myFeature = featureOne();
    myFeature.foo();
});

这样我只公开函数foo(),因此bar()privateVar是私有的,无法从其他模块访问。

问题

现在,让我们假设我需要将一些私有函数用于其他模块 - featureTwo() - 作为其中的一部分,提供完全相同的功能。但是,这两个模块应该保持彼此分离,因为它们对不同的事件做出反应或依赖于不同的因素。基本上,除了"共享"代码连接它们。

实现这一目标的最佳/正确方法是什么?目标是避免代码重复并保持清洁。我正在考虑移动"共享"代码的一部分在全球范围内,但我觉得这不是最佳方式。

对于正确组织代码的任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以定义一个getter / setter,并使用前面的_命名这些函数,以表明它们不应该被混淆:

$(function() {
    'use strict';

    // Example feature module
    var featureOne = (function() {
        var privateVar = 0;

        function bar(n) {
            console.log(n);
        }

        return {
            foo: function() {
                bar(privateVar);
                return this;
            },
            _getPrivateVar: function() {
                return privateVar;   
            },
            _setPrivateVar: function(val) {
                privateVar = val;
                return this;
            }
        }
    })()

    var myFeature = featureOne;
    myFeature.foo(); //logs 0
    console.log(myFeature._getPrivateVar()) //logs 0
    myFeature._setPrivateVar('hi').foo() //logs 'hi'
});