最近の行儀の良いJavascriptをCoffeeScriptで書く
最初に
やり方1
-
- 入力
- 下記で何故、globalが取れるのかはWebModuleIdiomで確認して下さい
1 ((global)->
2 #エクスポーズをスマートにまとめてしまう方法
3 "use strict"
4 # Class
5 ModuleName = ->
6 # Header
7 ModuleName["prototype"]["method"] = ModuleMethod
8 # Implementation
9 ModuleMethod = (Arg) ->
10 # Exports
11 if ("process" of global)
12 module["exports"] = ModuleName
13 global["ModuleName"] = ModuleName
14 )(
15 (this or 0)
16 .self or global
17 )
- 出力
1 (function(global) {
2 "use strict";
3 var ModuleMethod, ModuleName;
4 ModuleName = function() {};
5 ModuleName["prototype"]["method"] = ModuleMethod;
6 ModuleMethod = function(Arg) {};
7 if ("process" in global) {
8 module["exports"] = ModuleName;
9 }
10 return global["ModuleName"] = ModuleName;
11 })((this || 0).self || global);
やり方2
(なんかはやってる、処理を上で直接的に書けるから仕様変更には強そう)
- 入力
1 ((definition) ->
2 # 定義する関数を引数にとる
3 # ロードされた文脈に応じてエクスポート方法を変える
4 if typeof exports is "object"
5 # CommonJS
6 module.exports = definition()
7 else if typeof define is "function" and define.amd
8 # RequireJS
9 define definition
10 else
11 # <script>
12 MyModule = definition()
13 )(->
14 # 実際の定義を行う関数
15 "use strict"
16 MyModule = ->
17 MyModule:: = {}
18 MyModule()
19 )
- 出力
1 (function(definition) {
2 var MyModule;
3 if (typeof exports === "object") {
4 return module.exports = definition();
5 } else if (typeof define === "function" && define.amd) {
6 return define(definition);
7 } else {
8 return MyModule = definition();
9 }
10 })(function() {
11 "use strict";
12 var MyModule;
13 MyModule = function() {};
14 MyModule.prototype = {};
15 return MyModule();
16 });