摘要:JavaScript NameSpace
JavaScript的 NameSpace可以像這樣實做:
//something like this var myNameSpase={}; myNameSpace.common={}; myNameSpace.common.tooltip=function(){}; //save as myNameSpace.common.js
如果其他地方要用只要把 myNameSpace.common.js檔加進來就可以了。
過一段時間,通常會變複雜…可能 myNameSpace.htmlTool.fnGG會用到 myNameSpace.common.fnYY…先不考慮架構清不清楚的問題,要怎麼在使用 myNameSpace.htmlTool.js的時候檢查有沒有先引用 myNameSpace.common.js?
function checkRequire(checkModels, errLogMsg, force){ force = (typeof(force)==='boolean' ?force :false); errLogMsg = errLogMsg || ''; var models = checkModels.split(','); for( var m=0, n=models.length; m<n; m++){ var model = models[m]; var nameSpace = model.split('.'), undefined; var root = window; for(var i=0, j=nameSpace.length; i<j; i++){ var thisNameSpace = nameSpace[i]; if(typeof root[thisNameSpace]==='undefined'){ console.log(['need ', nameSpace.slice(0,i+1).join('.'), '; ', errLogMsg].join('')); if(force) return undefined; } else{ root = root[thisNameSpace]; } } } return true; } function checkRequireEval(checkModels, errLogMsg, force){ force = (typeof(force)==='boolean' ?force :false); errLogMsg = errLogMsg || ''; var models = checkModels.split(','); for( var m=0, n=models.length; m<n; m++){ var model = models[m]; var obj = eval(model);//if AA.BB === undefined, then AA.BB.CC will die without message; 然後發現不用 eval的函數有我沒考慮到的地方,但意外的符合我的需求XD if(typeof obj==='undefined'){ console.log(['need ', model, '; ', errLogMsg].join('')); if(force){ return undefined; } } } return true; }; console.time('t1'); console.log('result1',checkRequire('AA.BB.CC.DD', 'must include', true) && checkRequire('AA.FF, AA.GG', 'option include, a request need two or more models') ); console.timeEnd('t1');//2ms console.time('t2'); console.log('result1',checkRequireEval('AA.BB.CC.DD', 'must include', true) && checkRequireEval('AA.FF, AA.GG', 'option include, a request need two or more models') ); console.timeEnd('t2');//3ms if(checkRequire('AA.BB.CC.DD', 'must include', true) && checkRequire('AA.FF, AA.GG', 'option include, a request need two or more models')){ // all include } else{ return;//already log in function checkRequire }
意外的發現 chrome也有 console.time可以用~