Skip to content

Instantly share code, notes, and snippets.

@pjchender
Last active May 22, 2017 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjchender/a3a0994f3881ae6796ba29d81466129b to your computer and use it in GitHub Desktop.
Save pjchender/a3a0994f3881ae6796ba29d81466129b to your computer and use it in GitHub Desktop.
[Node][Unit26] Module Pattern
/* eslint-disable */
/**
* PATTERN 1
**/
module.exports = function() {
console.log('Hello world');
};
var greet = require('./greet1');
greet();
/**
* PATTERN 2
**/
module.exports.greet = function() {
console.log('Hello world!');
};
var greet2 = require('./greet2').greet;
greet2();
/**
* PATTERN 3: require 會把載入的檔案建立快取,所以當再次 require 時,其實是引用到同一個物件。
**/
function Greetr() {
this.greeting = 'Hello world!!';
this.greet = function() {
console.log(this.greeting);
}
}
module.exports = new Greetr();
var greet3 = require('./greet3');
greet3.greet();
greet3.greeting = 'Changed hello world!';
var greet3b = require('./greet3'); // 會引用到同一個物件
greet3b.greet();
/**
* PATTERN 4
**/
function Greetr() {
this.greeting = 'Hello world!!!';
this.greet = function() {
console.log(this.greeting);
}
}
module.exports = Greetr;
var Greet4 = require('./greet4');
var grtr = new Greet4(); // 在 app 中才建立實例
grtr.greet();
/**
* PATTERN 5: revealing module pattern
* 模組外可以使用 greet 這個函式,同時可以引用到 greeting 這個變數,但是在模組外並沒有辦法直接取得 greeting。
**/
var greeting = 'Hello world!!!!';
function greet() {
console.log(greeting);
}
module.exports = {
greet: greet
}
var greet5 = require('./greet5').greet;
greet5();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment