代码改变世界

Symbol.iterator 与 Generator yield

2023-06-05 22:34  muamaker  阅读(17)  评论(0)    收藏  举报

 

一、当一个对象实现了   Symbol.iterator 方法,就可以被 for  of

	const obj = {
			val:0.,
			[Symbol.iterator](){
				return {
					next(){
						return {
							value: obj.val++,
							done: obj.val > 10 ? true: false
						}
					}
				}
			}
		}
		
		for(let i of obj){
			console.log(i)
		}

  

二、数组天然自带

	 const arr = [1, 2, 3, 4, 5];
		 // 获取并调用数组内建的迭代器方法
		 const itr = arr[Symbol.iterator]();
		 console.log(itr.next());
		 console.log(itr.next())
		 console.log(itr.next())
		 console.log(itr.next())
		 console.log(itr.next())
		 console.log(itr.next())
		 console.log(itr.next())

  

三、Generator  yield 

	 function * It(){
			 yield 1;
			 yield 2;
			// yield * It();
		 }
		 
		 
		 const itr2 = It();
		 
		 console.log(itr2.next())
		 console.log(itr2.next())
		 console.log(itr2.next())

  

四、模拟数组

		 // 模拟数组的遍历
		 let obj2 = {
			 0:'0',
			 1:'1',
			 2:'2',
			 length: 3,
			 [Symbol.iterator](){
				 let index = -1;
				 let me = this;
				 let len = me.length;
				 return {
					 next(){
						 index++;
						 return {
							 value: index < len ? me[index]:undefined,
							 done: index >= len
						 }
					 }
				 }
			 }
		 }
		 
		 for(let n of obj2){
			 console.log('---',n)
		 }

  

 

https://www.cnblogs.com/muamaker/p/8806462.html