APICloud-端JS庫功能API文檔(1)


框架簡介:

框架基於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM