cocos2d JS 源生js實現each方法

javascript筆記——源生js實現each方法

 

出處:http://www.lovejavascript.com/#!zone/blog/content.html?id=48javascript

jquery裏面有個each方法,將循環操做簡化、便捷。html

隨後es出了個forEach方法,兩個雖然用法相近,可是不能處理對象類型。且沒法經過return true達到continue效果。java

此外還有個every方法,該方法雖然能夠實現continue效果,可是在處理類數組與對象類型時,徹底無用。jquery

 

在不使用jquery的each方法時,該如何處理;或者說用原生如何來實現?我在GridManager.js中集成了該方法,代碼以下:數組

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 經過字面量方式實現的函數each
var  each =   function (object, callback){
   var  type = ( function (){
           switch  (object.constructor){
             case  Object:
                 return  'Object' ;
                 break ;
             case  Array:
                 return  'Array' ;
                 break ;
             case  NodeList:
                 return  'NodeList' ;
                 break ;
             default :
                 return  'null' ;
                 break ;
         }
     })();
     // 爲數組或類數組時, 返回: index, value
     if (type ===  'Array'  || type ===  'NodeList' ){
         // 因爲存在類數組NodeList, 因此不能直接調用every方法
         [].every.call(object,  function (v, i){
             return  callback.call(v, i, v) ===  false  false  true ;
         });
     }
     // 爲對象格式時,返回:key, value
     else  if (type ===  'Object' ){
         for ( var  in  object){
             if (callback.call(object[i], i, object[i]) ===  false ){
                 break ;
             }
         }
     }
}

 

咱們來try一下, 測試下數組、對象、類數組類型及中斷效果函數

數組類型:post

 

1
2
3
4
var  _array = [1,2,3,4];
each(_array,  function (i, v){
   console.log(i +  ': '  + v);
});

輸出以下:測試

 

對象類型:url

 

1
2
3
4
var  object = {a:1, b:2, c:3}
each(object,  function (i, v){
   console.log(i +  ': '  + v);
});

輸出以下:spa

 

類數組類型 :

 

1
2
3
4
var  ele = document.querySelectorAll( 'div' );
each(ele,  function (i, v){
   console.log(i +  ': '  + v);
});

輸出以下:

 

增長中斷條件:

 

1
2
3
4
5
6
7
8
9
10
11
12
var  object2 = {name: 'baukh' , age:  '29' , six: '男' , url:  'www.lovejavascript.com' ,}
each(object2,  function (i, v){
   if (i ===  'age' ){  //若是存在鍵值爲age的屬性時,則輸出警告,用於實現continue效果
     console.log( '存在鍵值爲age,這傢伙已經' +v+ '歲了' );
     return  true ;
   }
   if (i ===  'six'  && v ===  '男' ){ //若是存在鍵值爲age的屬性時,則輸出跳出,用於實現break效果
     console.log( '存在鍵值爲six,是個男的,不用關注了~' );
     return  false ;
   }
   console.log(i +  ': '  + v);
});

輸出以下:

從結果能夠看出來,each方法已經實現了jquery的each功能。且實現如此簡單~

相關文章
相關標籤/搜索