揭示 class 模式与原型方法?

Revealing class pattern vs prototype method?

我已经看到了揭示模块模式,以及原型 class 模式。我有点将两者一起改编成一个有启发性的 class 模式。我试图弄清楚这种模式是否存在任何问题,或者是否存在无法正常工作的问题。只要对象的构造函数是 typeof "function" 我认为不会有任何问题。

我能想到的唯一警告是大量实例化 class,每次创建新的 class 时都会创建私有函数。这可能会导致数千个实例化的内存问题。但是,对于不在内存中建立的较大 classes,我的想法是更容易的代码可读性和安全性可能是有益的。通过将函数保密并公开它们,混淆器将所有内部函数最小化,使窥探变得困难。当然,它并非万无一失,只是多了一层保护。此外,能够在函数内部私下工作,删除了 class 中出现的数百个 "this"。也许这是一个小优势,但对于复杂的代码,它可以提高可读性。有人发现该模式存在任何重大问题吗?

//standard pattern

var MyClass = function() {
    this.func1 = function() {
        //dostuff
    };
};
MyClass.prototype.func2 = function() {
    this.func1();
    //dostuff
};

-

//revealing class pattern

var MyClass = function() {
    function privateFunc() {
        //dostuff
    }

    function publicFunc() {
        privateFunc();
        //dostuff
    }

    this.publicFunc = publicFunc;
};

I've seen the revealing module pattern, as well as the prototype class pattern. I kind of adapted the two together into a revealing class pattern.

您应该看看 揭示原型模式,它真正将它们结合起来揭示 class。你目前拥有的应该被称为 "revealing instance pattern".

Anybody see any major problems with the pattern?

您已经说明了主要注意事项,但如果您认为值得,那就去做吧。考虑到大多数 classes 是 not 大量实例化,这实际上不再有任何区别。

不过,您可以改进您的模式。鉴于您不再使用原型,没有理由保留它。删除 new 运算符,在构造函数中使用 this 关键字删除,并使用 return 对象文字。瞧,你有一个 工厂函数