我試圖瞭解如何公共屬性在(顯示)模塊模式工作。通過Carl Danley "The Revealing Module Pattern"指出的優點是:(顯示)模塊模式,公共變量和返回語句
明確定義的公共方法和變量,導致增加可讀性
讓我們來看看這個代碼(fiddle):
var a = function() {
var _private = null;
var _public = null;
function init() {
_private = 'private';
_public = 'public';
}
function getPrivate() {
return _private;
}
return {
_public : _public,
init : init,
getPrivate : getPrivate,
}
}();
a.init();
console.log(a._public); // null
console.log(a.getPrivate()); // "private"
它當致電a._public
時返回null
。我現在可以操縱公共財產,如a._public = 'public';
。但我無法從我的對象內改變它。或者至少這些更改沒有通過。我有點期待它是"public"
,因爲它已被init
-方法更新過。
這實際上是否意味着,我不能有任何方法,處理公衆屬性?然後公衆這種模式的屬性沒有什麼意義,對吧?我也試過這個沒有運氣(fiddle):
return {
_pubic : _public,
init2 : function() {
_public = 'public';
}
}
最後,但並非最不重要,我有一個關於整個return
陳述的問題。爲什麼不可能僅僅使用return this;
來公開所有內容?由於this
應該是自調函數的上下文,它不應該只是返回eveyrthing嗎?爲什麼我必須創建另一個對象,返回?在fiddle中,它返回window
對象。
非常感謝您非常簡短的和有益的解釋。 – lampshade
@TJCrowder:感謝您的信任:-)其實我在發佈這個存根後就去吃了午飯,看到您已經回答了......不幸的是,您刪除了您的答案,其內容甚至沒有保存在歷史記錄中: -/ – Bergi
是的,我也看到了他的回答,也有一些很好的見解。但突然它消失了。 – lampshade