javascript自己實現一個叠代器
阿新 • • 發佈:2019-03-15
scrip 實現 分享 scale 自己實現 代碼 one log 一個
js中對象分為可叠代和不可叠代 如果是可叠代哪它就會有一個[Symbol.iterator] 函數
這個函數就是對象的叠代器函數,如用for of 如果遍歷的對象沒有這個叠代方法那麽就會報錯
for of 傳入的是可叠代對象,但是如何吧一個不可叠代的對象變為可叠代的對象呢!
很簡單就是自己寫一個[Symbol.iterator] 函數。
代碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> let obj= { a:1, b:2 } obj[Symbol.iterator] = function () { //取到對象的每個key值返回一個數組 let keys = Object.keys(obj); //取到key值的長度 let len = keys.length; //定義循環變量 let n = 0; //返回對象 每次叠代會自動調用對象裏面的next方法return { next(){ if(n < len){ //返回值有value和done //value能自定義 //done為true跳出循環 return{ value:{k:keys[n],v:obj[keys[n++]]}, done:false } }else{ return{ done:true } } } } } //循環 //for of 只能遍歷可叠代對象 //所以自己寫了個叠代器 詳情請查閱web叠代協議 //返回的是個對象的key和value for(let {k,v} of obj){ console.log(k,v); } </script> </body> </html>
註釋很完整就不多講了,
輸出如下:
希望能夠幫助到你們!!
javascript自己實現一個叠代器