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());

ECMAScript6新增功能续_第1张图片

生成器Generators

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

            //定义一个生成器,生成器名字chef,yield是生成器的返回值
//          function* chef(){
//              yield "tea";
//              yield "cake";
//          }
            function* chef(food){
                for(var i=0;i"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);

ECMAScript6新增功能续_第2张图片

你可能感兴趣的:(javascript)