框架簡介:
框架基於APICloud官網端API進行擴展和封裝,框架完全采用面向對象編程形式,里面包含APP所使用的常用js功能:js類的自定義(類,構造方法,靜態方法,繼承...),常用工具函數(驗證,變量類型,inarray,序列化轉JSON...),對象擴展extend方法,迭代器each方法,apicloud常用端對象。
框架功能簡要說明:
(1)封裝js自定義類的方法,編寫Base對象作為所有類的基類(即框架的類都繼承與它)。
1 /** 2 * 3 * Base 4 * @description 用於實現最基礎的方法等 5 * 6 */ 7 var 8 Base = { 9 /** 10 * 判斷 類與類之間 以及 對象與類之間 關系的基礎方法 11 * 12 * 情況一(類與類之間): 13 * 1. 父類.is(子類) -> false 14 * 2. 子類.is(父類) -> true 15 * 16 * 情況二(對象與類之間): 17 * 1. 父類對象.is(子類) -> false 18 * 2. 子類對象.is(父類) -> true 19 * 20 * @param {Object} type 類名稱 21 * @return {Boolean} 22 */ 23 is : function(type){ 24 var 25 self = this; 26 27 /** 28 * 29 * 調用對象.is(指定對象) 30 * 判斷 調用對象 是否 包含 指定對象(屬性) 31 * 或者也可以這樣說 32 * 判斷 指定對象 是否 包含於 調用對象(屬性) 33 * 34 */ 35 36 while ( self ) { 37 if ( self == type ) return true; 38 self = self.__type__; // __type__ : (1)Class-引用其父類 (2)New-實例所屬的類 39 } 40 41 return false; 42 } 43 }; 44 45 46 var 47 /** 48 * 核心方法一: Class 49 * 50 * 創建類的函數,用於聲明類及繼承關系 51 * 52 * @param {Object} DefineClass 定義類的對象 53 * @param {Object} BaseClass 需要繼承的類(省略默認為 Base) 54 * @return {Class} 創建類 55 */ 56 Class = function(DefineClass, BaseClass){ 57 // 默認繼承 Base 基類 58 var 59 parent = BaseClass || Base, 60 // 創建類的臨時函數殼 _class 61 _class = function(){ 62 // __type__ 屬性 : 引用其父類 63 this.__type__ = parent; 64 // 復制類的全部定義到當前創建的類 65 for( var member in DefineClass ) { 66 this[member] = DefineClass[member]; 67 } 68 }; 69 70 _class.prototype = parent; 71 72 return new _class(); 73 }; 74 75 var 76 /** 77 * 核心方法二: New 78 * 79 * 創建對象的函數,用於任意類的對象創建 80 * 81 * @param {Object} ClassName 類 82 * @param {Object} ClassParam 類參數(構造函數需要的參數) 83 * @return {Object} 創建對象 84 */ 85 New = function(ClassName, ClassParam){ 86 // 創建對象的臨時函數殼 _new 87 var 88 _new = function(){ 89 // __type__ 屬性 : 據此可以訪問到對象所屬的類 90 this.__type__ = ClassName; 91 if(ClassName.create && typeof ClassName.create === 'function'){ 92 // 約定 所有 類的構造函數: create ! 93 ClassName.create.apply(this, ClassParam); 94 } 95 }; 96 97 _new.prototype = ClassName; 98 99 return new _new(); 100 };
(2)全局函數(功能函數的擴充)
1 /** 2 * 3 * --------------------------- 4 * 創建全局方法 VarToBool | 5 * @title VarToBool Global | 6 * @description 空值監測 | 7 * --------------------------- 8 * 9 */ 10 var 11 /** 12 * 判斷變量 是否 成立 13 * [VarToBool 規定 ''|null|undefined|NaN|0|{}|[] 都為false,其他變量均為true] 14 * 15 * @param {[object]} data [需要判斷的變量] 16 * @return {[Boolean]} 17 */ 18 VarToBool = function(data){ 19 var 20 _t = typeof data 21 ,hasProp = false 22 ,prop = null 23 ; 24 25 if( _t === 'object' ) { 26 for ( prop in data ) { 27 hasProp = true; // 證明該對象存在屬性 28 break; 29 } 30 return hasProp; 31 } 32 33 return !!data; 34 }; 35 /** 36 * 37 * --------------------------- 38 * 創建全局方法 GetType | 39 * @title GetType Global | 40 * @description 獲取變量類型 | 41 * --------------------------- 42 * 43 */ 44 var 45 /** 46 * 得到變量 類型 字符串 47 * 'abc' return 'string' 48 * true return 'boolean' 49 * 123,NaN,Infinity return 'number' 50 * [] return 'array' 51 * {} return 'object' 52 * function(){} return 'function' 53 * new Date return 'date' 54 * new RegExp return 'regexp' 55 * Math return 'math' 56 * null return 'null' 57 * undefined return 'undefined' 58 */ 59 GetType = function(data){ 60 var 61 _t = '' 62 ; 63 64 return ( (_t = typeof data) == 'object' ? data == null && 'null' || Object.prototype.toString.call(data).slice(8,-1):_t ).toLowerCase(); 65 }; 66 /** 67 * 68 * --------------------------------- 69 * 創建全局方法 SerializeToJson | 70 * @title SerializeToJson Global | 71 * @description form序列化轉JSON | 72 * --------------------------------- 73 * 74 */ 75 var 76 /** 77 * 將 序列化字符串(a=b&c=d&e=f) 轉化 為 json 對象 78 */ 79 SerializeToJson = function(paramStr){ 80 var 81 json = {} 82 ,pairs = null 83 ,i = 0 84 ,pairsLen = 0 85 ,pos = 0 86 ,argname = '' 87 ,value = '' 88 ; 89 90 if(!paramStr || typeof paramStr !== 'string'){ 91 return {}; 92 } 93 paramStr = paramStr.replace(/\s*/g,''); // 清除該字符串所有空格 94 95 pairs = paramStr.split('&'); 96 97 pairsLen = pairs.length || 0; 98 99 for(;i<pairsLen;i++){ 100 pos = pairs[i].indexOf('='); 101 102 // look for "name=value" 103 if(pos == -1) continue; 104 105 // if not found, skip 106 argname = pairs[i].substring(0,pos); 107 // extract the name 108 value = pairs[i].substring(pos + 1); 109 // extract the value 110 value = decodeURIComponent(value); 111 // decode it , if needed 112 json[argname] = value; 113 } 114 return json; 115 }; 116 /** 117 * 118 * --------------------------------- 119 * 創建全局方法 JsonToSerialize | 120 * @title JsonToSerialize Global | 121 * @description JSON轉form序列化 | 122 * --------------------------------- 123 * 124 */ 125 var 126 /** 127 * 將 json 對象 轉化 為 序列化字符串(a=b&c=d&e=f) 128 */ 129 JsonToSerialize = function(json){ 130 var 131 k = null 132 ,strArr = [] 133 ; 134 135 if(!json || typeof json !== 'object'){ 136 return ''; 137 } 138 139 for(k in json){ 140 strArr.push(k + '=' + json[k]); 141 } 142 143 return strArr.join('&'); 144 }; 145 /** 146 * 147 * --------------------------- 148 * 創建全局方法 InArray | 149 * @title InArray Global | 150 * @description | 151 * --------------------------- 152 * 153 */ 154 var 155 /** 156 * @method InArray 檢查值是否在數組中 157 * @param {value,Array} 值,數組 158 * @return {Boolean} 真返回true,否則返回false 159 */ 160 InArray = function(val,arr){ 161 var 162 i = 0 163 ,l = 0 164 ; 165 166 if ( GetType(arr) !== 'array' ){ 167 throw '{"code":"1","msg":"數組不存在"}'; 168 } 169 170 for ( i = 0, l = arr.length; i < l; i++ ) { 171 if ( arr[i] === val ) { 172 return true; 173 } 174 } 175 176 return false; 177 };
(3)App對象
App.extend : 對象擴充
/** * [extend 對象合並] * @param {[object]} des [源對象] * @param {[array|object]} src [對象數組] * @param {[boolean]} override [是否重寫源對象] * @return {[object]} [返回源對象的引用] */ App.extend = function(des, src, override){ var i = 0 ,l = 0 ,k = null ,argsLen = arguments.length ; /* 方法重載 開始 */ if ( argsLen === 0 ) { return {}; } else if ( argsLen === 1 ) { return arguments[0]; } /* 方法重載 結束 */ if ( src instanceof Array ) { for ( i = 0, l = src.length; i < l; i++ ) { App.extend(des, src[i], override); } } else { for ( k in src ) { if ( override || !(k in des) ) { des[k] = src[k]; } } } return des; };
App.each : 迭代器
1 /** 2 * [_each 迭代器] 3 * @param {[array]} obj [待迭代對象數組] 4 * @param {Function} callback [迭代回調方法] 5 * @param {[object]} context [環境變量,用作回調函數中this的對象] 6 * @param {[type]} arg [傳入迭代回調函數的參數] 7 * @throws {jsonstringify} 缺少參數 8 */ 9 App.each = function(obj, callback, context, arg){ 10 var 11 k = null 12 ,argsLen = arguments.length 13 ; 14 15 /* 方法重載 開始 */ 16 if ( argsLen === 0 || argsLen === 1 ) { 17 throw '{"code":"1","msg":"缺少參數"}'; 18 } 19 /* 方法重載 結束 */ 20 21 if ( !callback || typeof callback !== 'function' ) throw '{"code":"1","msg":"參數類型必須為function"}'; 22 23 for ( k in obj ) { 24 callback.call( context||null, k, obj[k], arg ); 25 } 26 };
(4)App.APICloud對象
在該對象下完全和APICloud端API分類相同:窗口系統、應用管理、網絡通信、數據存儲、消息事件、設備訪問、UI組件、多媒體、WebApp歷史、其他。
略。
(5)框架關鍵字:
基礎:Base Class New UseAs VarToBool GetType SerializeToJson JsonToSerialize InArray
對象:App Utils WinSystem AppManage Network DataStorage MsgEvent UI Media History Page
