- Notifications
You must be signed in to change notification settings - Fork8
WebModule.js
uupaa edited this pageAug 1, 2015 ·23 revisions
このエントリでは WebModule.js について説明します。
最初に WebModule.js を読み込み、その後に WebModule製のモジュール(例: MyExample.js)を読み込みます。
<scriptsrc="../lib/WebModule.js"></script><script>//publish to global. eg: window.WebModule.Class -> window.Class//WebModule.publish = true;</script><scriptsrc="../lib/MyExample.js"></script><script>varmyExample=newWebModule.MyExample();</script>
モジュールを GLOBAL 空間以下に直接公開することもできます。
モジュールを読み込む前に、WebModule.publish = true;
を設定しておくと、
通常new GLOBAL.WebModule.Module()
のように記述すべきところを、new GLOBAL.Module()
と、より短く記述できるようになります。
GLOBAL は省略できるため、実際にはnew Module()
と更に短く記述できます。
<scriptsrc="../lib/WebModule.js"></script><script>WebModule.publish=true;</script><scriptsrc="../lib/MyExample.js"></script><script>varmyExample=newwindow.WebModule.MyExample();// OKvarmyExample=newGLOBAL.WebModule.MyExample();// OKvarmyExample=newWebModule.MyExample();// OKvarmyExample=newwindow.MyExample();// OKvarmyExample=newGLOBAL.MyExample();// OKvarmyExample=newMyExample();// OK</script>
WebModule version 0.5.25 時点の WebModule.js はこのようになっています。
GLOBAL は ブラウザ上では window と等価です。
Namespaceを参照してください。
// http://git.io/WebModule// --- global variables ------------------------------------// https://github.com/uupaa/WebModule/wiki/WebModuleIdiomvarGLOBAL=GLOBAL||(this||0).self||global;// --- environment detection -------------------------------GLOBAL["IN_NODE_OR_NW"]=!!GLOBAL.global;GLOBAL["IN_BROWSER"]=!GLOBAL["IN_NODE_OR_NW"]&&"document"inGLOBAL;GLOBAL["IN_WORKER"]=!GLOBAL["IN_NODE_OR_NW"]&&"WorkerLocation"inGLOBAL;GLOBAL["IN_NODE"]=GLOBAL["IN_NODE_OR_NW"]&&!/native/.test(setTimeout);GLOBAL["IN_NW"]=GLOBAL["IN_NODE_OR_NW"]&&/native/.test(setTimeout);// --- validate and assert functions -----------------------//{@dev https://github.com/uupaa/WebModule/wiki/ValidateGLOBAL["$type"]=function(value,types){returnGLOBAL["Valid"] ?GLOBAL["Valid"].type(value,types) :true;};GLOBAL["$keys"]=function(value,keys){returnGLOBAL["Valid"] ?GLOBAL["Valid"].keys(value,keys) :true;};GLOBAL["$some"]=function(value,candidate,ignoreCase){returnGLOBAL["Valid"] ?GLOBAL["Valid"].some(value,candidate,ignoreCase) :true;};GLOBAL["$args"]=function(api,args){if(GLOBAL["Valid"]){GLOBAL["Valid"].args(api,args);}};GLOBAL["$valid"]=function(value,api,highlihgt){if(GLOBAL["Valid"]){GLOBAL["Valid"](value,api,highlihgt);}};//}@dev// --- WebModule ------------------------------------------GLOBAL["WebModule"]={"publish":false,// All WebModules publish to global."closure":{},"exports":function(name,closure){varaka=this[name] ?(name+"_") :name;returnthis[aka]||(function(wm){// GLOBAL.WebModulewm[aka]=closure(GLOBAL);wm["closure"][aka]=closure+"";return(!wm["publish"]||GLOBAL[aka]) ?wm[aka] :GLOBAL[aka]=wm[aka];})(this);}};