ECMAScript6新增功能续

ECMAScript6新增功能续

迭代器 Iterators

Iterators 迭代 轮流交换,Iterators有几个特点,每次执行的时候会返回一个对象
对象里面有两样东西,{value:xx,done:true/false},value是返回的值,done的值是一个布尔值,判断是否还有要迭代的东西。完成迭代值为true。另外Itrerators里面还有一个next()方法,每次执行这个方法的时候会返回一个对象,对象里的东西就是value和done这两个属性。如果没有迭代的东西的话,执行next这个方法之后,value这个值会变成undefined,done会变为true。es6中generator可以生成迭代,但是这里我们手工创建一个迭代器。

            'use strict'
            function chef(food){
                let i=0;
                return{
                    next(){
                        let done=(i>=food.length);
                        let value=!done?food[i++]:undefined;
                        return{
                            value:value,
                            done:done
                        }
                    }
                }
            }
            let aChef=chef(["tea","tomato","potato"]);
            console.log(aChef.next());
            console.log(aChef.next());
            console.log(aChef.next());

这里写图片描述

生成器Generators

generators可以解决手工生成迭代器的麻烦,

            //定义一个生成器,生成器名字chef,yield是生成器的返回值
//          function* chef(){
//              yield "tea";
//              yield "cake";
//          }
            function* chef(food){
                for(var i=0;i<food.length;i++){
                    yield food[i];
                }
            }
            //基于生成器创建一个迭代器,这个aChef就是迭代器
//          let aChef=chef();
            let aChef=chef(["tea","cake"]);
            console.log(aChef.next()); //输出{value:"tea",done:false}
            console.log(aChef.next());//输出{value:"cake",done:false}
            console.log(aChef.next());//输出{value:"undefined",done:true}

class 类

创建类的实例使用类内的方法

        class Chef {
            constructor(food){
                this.food=food;

            } //初始化的东西放在这个方法里面
            cook(){
                console.log(this.food);
            }//添加方法,不需要逗号隔开
        }
        let aChef=new Chef("cake");
        aChef.cook();

set和get

        class Chef {
            constructor(){
                this.dish=[]; //添加一个新属性
            } //初始化的东西放在这个方法里面
            get menu(){
                return this.dish;
            }
            set menu(dish){
                this.dish.push(dish);
            }//这个set的作用就是把dish推送到this.dish里面
        }
        let aChef=new Chef();
        console.log(aChef.menu="cake"); //输出:cake
        console.log(aChef.menu="milk");//输出:milk
        console.log(aChef.menu); //输出一个数组 ["cake","milk"]

静态方法static

在类里面添加静态方法,关键字static,静态方法就是不需要实例化类就可以使用的方法

        class Chef {
            static cook(food){
                console.log(food);
            }
        }
        Chef.cook("milk");//输出milk

继承 extends

        class Person{
            constructor(name){
                this.name=name;
            }
            intro(){
                return this.name;
            }
        }
        class Chef extends Person{
            constructor(name){
                super(name); //super可以调用父类里的东西
            }
        }
        let Mike=new Chef("Mike");
        console.log(Mike.intro());

Set

一个set就是一堆东西的集合,类似数组,但是和数组不一样的是set中不能放相同的东西。

        let dessert=new Set("abc");
        dessert.add("tomato");
        console.log(dessert);
        console.log(dessert.size);
        console.log(dessert.has("a"));
        dessert.delete("a");
        console.log(dessert);
        //循环处理set里面的东西
        dessert.forEach(dessert=>{
            console.log(dessert)
        });
        dessert.clear();
        console.log(dessert);

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值