1. 程式人生 > >javascript自己實現一個叠代器

javascript自己實現一個叠代器

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自己實現一個叠代器