我已经看到了揭示模块模式,以及原型类模式。我把两者结合起来,变成了一种暴露的阶级模式。我试图弄清楚这种模式是否存在任何问题,或者无法解决的问题。只要对象的构造函数是typeof" function"我认为不会有任何问题。
我能想到的唯一警告是高容量实例化类,每次创建新类时私有函数都会被创建。这可能会导致数千个实例化的内存问题。但是,对于不会在内存中构建的较大类,我的想法是代码可读性更容易,安全性可能会带来好处。通过保持功能私密并揭示它们,混淆器最大限度地减少了所有内部功能,使得难以窥探眼睛。当然,它并非万无一失,而只是一层额外的保护。此外,能够私下在函数内部工作,删除了数百次"这个"在课堂上。也许这是一个小优势,但对于复杂的代码,它可以提高可读性。有人看到这种模式有任何重大问题吗?
//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;
};
答案 0 :(得分:1)
我已经看到了揭示模块模式,以及原型类模式。我把两者结合起来,形成了一种暴露的阶级模式。
你应该看看揭示原型模式,它真正将它们结合起来以揭示一个类。你现在所拥有的应该被称为“揭示实例模式”。
有人看到这种模式有任何重大问题吗?
你已经说过了重要的警告,但如果你认为值得,那就去吧。鉴于大多数类不在非常大的卷中实例化,这实际上不再有任何区别。
但是,您可以改善您的模式。鉴于您不再使用原型,没有理由保留原型。删除new
运算符,使用构造函数中的this
关键字删除,然后返回一个对象文字。 Voilá,你有一个工厂功能!