Javascript私有方法和私有类变量

时间:2014-03-09 14:57:31

标签: javascript prototype

我不是一个专业的Javascript开发人员,所以我的经验仅限于使用在线教程以及反复试验的个人项目。我最近刚需要创建一个有自己的方法和成员变量等的对象。我一直在阅读Doug Crockford的笔记和其他东西,但我很难理解它们是如何组合在一起的。

请考虑以下代码:

var CLASS_VAR = "some_val";

function MyClass(opts) {
    this.options = opts;
    this.myContainer = null;
}

MyClass.prototype.doIt = function() {

    var privateMethod = function(options) {
        var container = document.createElement("div");
        // use CLASS_VAR and 'options' in some way
        return container;
    }

    this.myContainer = privateMethod(this.options);
}

这实际上是我的一部分代码使用的模式,但我不知道它是否有效或正确。这种模式是一个好主意,还是有更合理/有效/正确的方法来实现同样的目标?在我的实际代码中,doIt中有多个私有函数。此外,实际代码中有~50个“类”变量,所以我应该将它们保留在全局范围内,还是有一些方法可以像Java private static final那样使它们成为私有类变量?

已编辑以反映第一条评论

2 个答案:

答案 0 :(得分:1)

“@ plalx这就是我真正想要的,我想。你看,我实际上有4或5个函数在doIt里面(显然它没有被称为那个),这些函数比例子长很多。如果我是提取所有内容并将所有内容都放入其中它会有点混乱。“

好吧,如果这些函数只是在doIt中使用,你可以这样做:

MyClass.prototype.doIt = (function() {

    function privateMethod(options) {
        var container = document.createElement("div");
        // use CLASS_VAR and 'options' in some way
        return container;
    }

    function someOtherPrivateMethod() {}

    return function () {
        this.myContainer = privateMethod(this.options);
    };
})();

答案 1 :(得分:0)

在您提供的示例中,没有任何“真正的”私有方法。方法'privateMethod'只是'doIt'方法的标准成员。

如果你需要创建真正的私人成员 - 以下是Javascript模式的优秀指南(我建议你从'Revealing'模式开始,并从那里开始): Javascript Design Patterns