JavaScript應用資料緩衝對象申明,做到無資料時自動調用對應函數擷取資料並緩衝,當再次擷取資料時,直接從緩衝中擷取。
(function(){ var cacheObject={}; Object.defineProperty(window,'AppDataCache',{ writable: false, enumerable: false, configurable: false, value: {} }); Object.defineProperties(AppDataCache,{ add: { writable: false, enumerable: false, configurable: false, value: function(key, data_fn){ debugger; var obj = {}; if(typeof(key)==='string'){ obj[key]=data_fn; } else if(typeof(data_fn)==='string') { obj[data_fn]=key; } else if(key && typeof(key)==='object') { obj=key; } for(var k in obj) { if(k=='add' || k=='clear')throw Error("add key name can't equals [add,clear]"); if(cacheObject.hasOwnProperty(k) && console && console.warn) { delete cacheObject[k]; console.warn("Already exist["+k+"],Cover this key data"); } (function(k_,data_){ Object.defineProperty(AppDataCache,k_,{ //writable: true, enumerable: true, configurable: true, get: function(){ if(!cacheObject[k_]){ cacheObject[k_]=typeof(data_)==='function'?data_():data_; } return cacheObject[k_]; } }); })(k,obj[k]) } } }, clear: { writable: false, enumerable: false, configurable: false, value: function(key){ if(key) { return delete cacheObject[key]; } for(var k in cacheObject){ delete cacheObject[k]; } return true; } } });})()