> For the complete documentation index, see [llms.txt](https://lifeoverflow.gitbook.io/learning-javascript/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lifeoverflow.gitbook.io/learning-javascript/javascript-es5-jiao-xue/jin-jie-module-pattern.md).

# 進階-module pattern

**module相關-1:Mastering the Module** Pattern<https://toddmotto.com/mastering-the-module-pattern/>

module pattern經常會與 closure+self invoke function一起使用,

```javascript
var Module =
(function () {

 var x = "Hello!!"; // I will invoke myself

 return {
   name:"apple",
   test: function(){},
 }
})();
```

套用closure在module pattern上時, 過程都會返回一個使用`{}`Object Literal Notation的object.

**module相關-2:大型前端專案的架構**[https://medium.com/@benzwjian/%E5%A4%A7%E5%9E%8B%E5%89%8D%E7%AB%AF%E5%B0%88%E6%A1%88%E7%9A%84%E6%9E%B6%E6%A7%8B-cc235aacced0](https://medium.com/@benzwjian/大型前端專案的架構-cc235aacced0)

**整理:** 1. 基本上只使用Object Literal Notation `var obj={}`就可以達到module化，包含member function, member property. 2. 若一般module想要使用/模擬private data/function, 則需要透過closure來達到.

**closure與module** 透過closure來達到private data/function, 除了運用在常見的module pattern+self invoke function上面, 也可以發生在`自訂object`內部. 可參考 1. <http://stackoverflow.com/questions/1535631/static-variables-in-javascript>以及 2. 下面ES6章節的[link2](http://stackoverflow.com/questions/27849064/how-to-implement-private-method-in-es6-class-with-traceur)都有提到.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lifeoverflow.gitbook.io/learning-javascript/javascript-es5-jiao-xue/jin-jie-module-pattern.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
