[英]Revealing class pattern vs prototype method?
我已經看到了揭示性的模塊模式以及原型類模式。 我有點把兩者結合在一起,形成了一個生動的課堂模式。 我試圖找出是否有這種模式的陷阱,或者是行不通的事情。 只要對象的構造函數是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;
};
我已經看到了揭示性的模塊模式以及原型類模式。 我有點把兩者結合在一起,形成了一個生動的課堂模式。
您應該看看揭示原型模式 ,該模式將它們真正結合起來以揭示一個類。 您當前擁有的應該稱為“顯示實例模式”。
有人看到該模式有任何重大問題嗎?
您已經陳述了主要的警告,但是如果您認為值得,那就繼續吧。 鑒於大多數類都沒有大量實例化,因此這實際上不再起作用。
但是,您可以改善模式。 鑒於您不再使用原型,沒有理由保留它。 刪除new
運算符,在構造函數中使用this
關鍵字刪除,然后返回對象文字。 Voilá,您具有出廠功能 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.