PJCHENder
5/22/2017 - 8:06 AM

[Node][Unit26] Module Pattern

[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();