あるパブリックメソッドを別のパブリックメソッドから呼び出す、または、パブリック変数にアクセスするとき、メインオブジェクトの名前を繰り返す必要がある。また、公開したいものをオブジェクトリテラル表記に切り替える必要がある。 ↓ 全ての関数と変数をプライベートスコープで定義。 パブリックとして公開したいプライベート機能へのポインタ―を含む匿名オブジェクトを返す本パターンができた。 ⇒ ES2015+ のモジュール機構で普通に作れば、本パターンになるかと。
let privateVar = 'Ben Cherry'; const publicVar = 'Hey there!'; const privateFunction = () => { console.log(`Name:${privateVar}`}); }; const publicGetName = () => { privateFunction(); }; // 公開したいものだけ export export default { getName: publicGetName };
// 利用側 import myRevealingModule from './myRevealingModule'; myRevealingModule.setName("XXXXX");
ES2015以前の場合、Vue JS や色んなライブラリでこの方法がとられている。
var Vur = (function (exports) { 'use strict'; ~ exports.xxx = xxx; exports.yyy = yyy; Object.defineProperty(exports, '__esModule', { value: true}); return exports;
}({}));