淘宝Kissy框架分析【五】

继续分析kissy-lang.js

8.makeArray函数 

作用:转化类数组对象为真实的数组.

原理:主要需要处理的就是将NodeList转化成真实的数组. 在非IE浏览器都可以通过Array.prototype.slice.call(NodeList)来直接转换.但IE却不支持.

       所以IE下只能降级到普通的方法转换.

测试用例:

< div > 1 < / div><div>2< / div >< div > 3 < / div><div>4< / div >
< script >
(
function (J) {
    J.log(J.makeArray(
' a ' ));  //  ['a']
    J.log(J.makeArray( function  a() {}));  //  ['a()']
    J.log(J.makeArray([ ' a ' ' b ' ]));  //  ['a', 'b']
    J.log(J.makeArray( null ));  //  []
    
    
var  odiv  =  document.getElementsByTagName( ' div ' );
    J.log(J.makeArray(odiv)); 
//  ['divElement', 'divElement', 'divElement', 'divElement']
})(J1616);
< / script>

9.filter函数 

作用:通过回调函数的条件过滤数组项.

测试用例:

( function (J) {
    J.log(J.filter([
1 34 45 3 4 ],  function (item) {
        
return  item  >   10 ;   //  过滤大于10的数组项
    }));  //  [34, 45]
    J.log(J.filter([ 1 34 45 3 4 ],  function (item, index) {
        
return  index  >   2 ;   //  过滤索引大于2的数组项
    }));  //  [3, 4]
})(J1616);

10.param函数 

作用:将一个hash类型序列化成有效的url格式串形式.

测试用例:

( function (J) {
    
//  普通字符串
     var  url1  =  { ' name ' ' j16 ' ' age ' ' 23 ' ' sex ' ' men ' };
    J.log(J.param(url1)); 
//  name=j16&age=23&sex=men

    
//  空字符串
     var  url2  =  { ' name ' '' ' age ' '' ' sex ' ' men ' };
    J.log(J.param(url2)); 
//  name=&age=&sex=men

    
//  数组类型字符串
     var  url3  =  { ' name ' : [ ' j16 ' ' kissy ' ],  ' age ' ' 23 ' ' sex ' : [ ' women ' ' men ' ]};
    J.log(J.param(url3)); 
//  name[]=j16&name[]=kissy&age=23&sex[]=women&sex[]=men

})(J1616);

11.unparam函数 

作用:param函数的逆转换(将url序列成hash对象). 但由于国情的原因.并不是完全可逆的.decodeURIComponent只能处理UTF-8编码的的中文. 而不能处理gbk编码的中文. 

12.later函数

作用: 延迟函数. 在指定的时间内 执行一段函数(setTimeout). 或者在指定的时间内 重复的执行一段函数(setInterval).

测试用例:

( function (J) {
    
var  i  =   0 ;
    
var  intervalRun  =   function (a, b, c) {
        
if  ( ++ >=   10 ) {
            timer.cancel();
        } 
        J.log(i 
+   '  times run\ ' s params is:  '  + [a, b, c]);
    };
    // 每个1秒 调用intervalRun函数. 并传入参数. 超过10次便停止
    var timer = J.later(intervalRun, 1000/*1s*/, true/*setInterval*/, null/*context*/, [
' a ' ' b ' ' c ' ]);
 
    var timeoutRun = function(param) {
        J.log(
' the setTimeout param is:  '  + param);
    };
    // 1秒后 调用一次timeoutRun函数. 并传入参数
    J.later(timeoutRun, 1000, false, null, 
' setTimeout ' );
})(J1616);

13.now函数

作用:返回当前时间戳.

注意: kissy使用比较普通的new Date().getTime(). 有的框架用了高级浏览器支持的Date.now() || +new Data(比如mootools)但这个无所谓.清晰性更重要. 

14.globalEval函数

作用:在全局范围内执行代码

原理:kissy使用了script.text. 但貌似opera最新版本会有点问题. 全局执行代码有几个方法.具体可以参考司徒的这篇文章.

测试用例: 

( function (J) {
    
var  i  =   ' local '
    J.globalEval(
' var j = "global" ' );
})(J1616);
alert(j); 
//  由于globalEval函数可以冲破局部.所以可以得到j ==> global
alert(i);  //  由于i在闭包内. 所以是局部的 无法取到 而报错

至此kiss-lang.js部分分解完毕.接下来的是kissy-ua.js. 

转载于:https://www.cnblogs.com/bluedream2009/archive/2010/06/15/1758627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值