【问题标题】:Revealing class pattern vs prototype method?揭示类模式与原型方法?
【发布时间】:2016-09-27 16:40:27
【问题描述】:

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

我能想到的唯一警告是一个大容量的实例化类,每次创建新类时都会创建私有函数。这可能会导致数千个实例的内存问题。但是,对于不在内存中建立的较大类,我的想法是更容易的代码可读性和安全性可能是有益的。通过保持函数的私密性和公开它们,混淆器将所有内部函数最小化,使得窥探变得困难。当然,这不是万无一失的,而只是额外的保护层。此外,能够在函数内部私下工作,消除了类中数百次出现的“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;
};

【问题讨论】:

标签: javascript prototype javascript-objects javascript-framework revealing-module-pattern


【解决方案1】:

我已经看到了揭示模块模式以及原型类模式。我有点将这两者一起改编成一个具有启发性的类模式。

您应该看看显示原型模式,它真正结合了它们以显示一个类。您目前拥有的应该称为“显示实例模式”。

有人发现这个模式有什么大问题吗?

您已经说明了主要警告,但如果您认为值得,那就去吧。鉴于大多数类没有以非常大的量实例化,这实际上并没有什么区别。

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

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多