SOURCE

//symbol创建对象属性方法1
//向对象中添加方法 up down
       let game = {
            name:'俄罗斯方块',
           up: function(){},
           down: function(){}
        };

//声明一个对象
       let methods = {
         up: Symbol(),
           down: Symbol()
       };

        game[methods.up] = function(){
            console.log("我可以改变形状");
         }

        game[methods.down] = function(){
            console.log("我可以快速下降!!");
      }

       console.log(game);
       game[methods.up]();


       let a = Symbol('say');
       let b = Symbol('zibao');

       let youxi ={
           a: function(){
               console.log('我说')
           },
            b: function(){
                 console.log('自爆')
            }

       }
        youxi.a();
        console.log(youxi);

        //声明一个数组

        const xiyou = ['1','2','3','4'];

         //使用 for...of 遍历数组

        // for(let v of xiyou){
          //   console.log(v);
         //}
        //iterator 迭代器
        // let iterator = xiyou[Symbol.iterator]();

        //调用对象的next方法

      //  console.log(iterator.next());
        //console.log(iterator.next()); 

        //生成器其实就是一个特殊的函数       
        //yieldyield这个关键字是用来暂停和恢复一个遍历器函数(的运行)的
        //而yield告诉程序当前的状态值,而且你运行到这里暂停一下
        function *gen(){
            console.log(111);
            yield'眼睛';
            console.log(222);
            yield'耳朵';

        }

      //  let iterator = gen();

       // console.log(iterator.next());
        //console.log(iterator.next());
        

         //next方法可以传入实参

         function * gen(arg){
            console.log(arg);
            let one = yield 111;
            console.log(one);
            let two = yield 222;
            console.log(two);
            let three = yield 333;
            console.log(three);
        }
      //执行获取迭代器对象

     // let iterator = gen('aaa');
      //console.log(iterator.next());
      //console.log(iterator.next('bbb'));

 
        // 异步编程  文件操作 网络操作(ajax, request) 数据库操作
        // 1s 后控制台输出 111  2s后输出 222  3s后输出 333 


        function one (){
            setTimeout(()=>{
                console.log('111');
                iterator.next();
            },1000)
        }

         function two(){
            setTimeout(()=>{
                console.log('111');
                iterator.next();
            },1000)
        }

         function three (){
            setTimeout(()=>{
                console.log('111');
                iterator.next();
            },1000)
        }

        //生成器

        function *gen(){
            yield'one';
            yield'two';
            yield'three';

        }

        //调用

        //let iterator = gen();

       // iterator.next();

       function getusers (){
           
            setTimeout(()=>{
               let data = '用户数据';
                //调用 next 方法, 并且将数据传入
                //第二次调用next
                iterator.next(data);
            },1000)
        }

         function getorders(){
              
            setTimeout(()=>{
               let data = '订单数据';
                iterator.next(data);
            },1000)
        }

         //生成器

        function *gen(){
            //第二次调用next的实参是第一个yield的返回结果
            let users =yield getusers();
            let orders = yield getorders();

        }
        let iterator = gen();

        iterator.next();
console 命令行工具 X clear

                    
>
console