Skip to content
uupaa edited this page Apr 28, 2015 · 36 revisions

WebModule idiom は、どこでも動くJavaScriptコードを記述するためのイディオム(トリックの一種)です。
WebModule idiom を使うと、各プラットフォームにおけるルートオブジェクト(global object)を獲得する事ができます。

WebModule idiom version 2

2014〜2015年は version 2 のスタイルが使われています。

// WebModule idiom version 2
(function(global) {
"use strict";

// global["MyModule"].say("hello");

})((this || 0).self || global);

WebModule idiom version 2 は各プラットフォームにおいて以下のように評価されます。

platform expression and result
old Node.js ((undefined ││ 0).self ││ global)
((0).self ││ global)
((undefined ││ global)
(global)
→ Global Object
new Node.js
NW.js (Node context)
((global ││ 0).self ││ global)
((global).self ││ global)
((undefined ││ global)
(global)
→ Global Object
WebWorkers ((WorkerGlobalScope ││ 0).self ││ undefined)
((WorkerGlobalScope).self)
(WorkerGlobalScope.self)
→ Global Object
Browser
NW.js (Browser context)
((window ││ 0).self ││ undefined)
((window).self)
(window.self)
→ Global Object

WebModule idiom version 1

以下は、2013年に使用されていた古い書き方(version 1)です。

// WebModule idiom version 1
(function(global) {
"use strict";

// global["MyModule"].say("hello");

})(this.self || global);

ES6 and modules

ES6 Module スコープ内はデフォルトで strict モードになります。
また strict モードにおいては this は undefined になります。

// ここは strict mode です

export default class MyModule {
    constructor() {
    }
    say(msg) {
        console.log(msg); // ここも strict mode です
    }
};

var global = global || self; を使うと、適当な場所で global オブジェクトを獲得する事ができます。

var global = global || self;

(function(global) {


})(global);
Clone this wiki locally