es6中generator函数和类

generator函数

generator函数的声明

    function* fn() {
        console.log('generator函数');
        yield '1'
        console.log('generator函数');
        yield '2'
        console.log('generator函数');
    }

generator函数的调用

generator函数的调用 返回一个iterator对象,对象里面有一个next()方法,返回一个对象,里面有value和done,value代表yield后面的值。

     function* fn() {
        console.log('generator函数');
        yield '1'
        console.log('generator函数');
        yield '2'
        console.log('generator函数');
    }
    var gen = fn()
    console.log(gen.next());
    console.log(gen.next());
    console.log(gen.next());

return和yield的区别

return:后面的不执行,代表函数执行完成
yield:后面的可以执行,通过调用next()继续执行。

next()方法

next()方法还可以接受一个参数,它的参数会作为上一个yield的返回值

    function* genEr() {
        console.log('1');
        let res = yield '第一'
        console.log(res);
        let rest = yield res
        yield rest
    }
    let genEt = genEr()
    console.log(genEt.next());
    console.log(genEt.next('参数'));//{value:'参数',done:false}
    console.log(genEt.next('参数1'));//{value:'参数1',done:false}

在generator函数中调用其他函数

想从其他函数调用另一个函数 用yield*

    function* fn_1() {
        console.log('fn_1');
    }
    function* fn_2() {
        console.log('fn_2');
    }
    function* fn_3() {
        yield* fn_1()
        yield* fn_2()
        console.log('fn_3');
    }
    var FN = fn_3()
    FN.next()

es6中类的用法

声明类

    class Animal {
        // constructor构造函数
        constructor(name, age, eat) {
            this.name = name
            this.age = age
            this.eat = function () {
                // 构造函数中this指向实例化对象
                console.log(this);
            }
        }
    }
    var am = new Animal('bcd', 4, function () { console.log('this'); })
    console.log(am);
    console.log(am.name);
    console.log(am.age);
    am.eat()

在类中自定义方法

自定义方法 自定义方法中this指向实例化对象

     class Animal {
        // constructor构造函数
        constructor(name, age, eat) {
            this.name = name
            this.age = age
            this.eat = function () {
                // 构造函数中this指向实例化对象
                console.log(this);
            }
        }
        // 自定义方法 自定义方法中this指向实例化对象
        getName() {
            console.log(this);
        }
        setName(value) {
            // console.log(value);
            this.name = value
        }
    }
    var am = new Animal('bcd', 4, function () { console.log('this'); })
    console.log(am);
    console.log(am.name);
    console.log(am.age);
    am.eat()
    am.getName()
    am.setName('ls')
    console.log(am.name);

类中的静态方法

静态方法: static是关键字 静态方法中this 指向当前类,必须通过类调用

     class Animal {
        // constructor构造函数
        constructor(name, age, eat) {
            this.name = name
            this.age = age
            this.eat = function () {
                // 构造函数中this指向实例化对象
                console.log(this);
            }
        }
        // 自定义方法 自定义方法中this指向实例化对象
        getName() {
            console.log(this);
        }
        setName(value) {
            // console.log(value);
            this.name = value
        }

        // 静态方法: static是关键字 静态方法中this 指向当前类,必须通过类调用
        static getAge() {
            console.log(this);
        }
    }
    var am = new Animal('bcd', 4, function () { console.log('this'); })
    console.log(am);
    console.log(am.name);
    console.log(am.age);
    am.eat()
    am.getName()
    am.setName('ls')
    console.log(am.name);
    Animal.getAge()

类的继承

在es6中使用extends关键字来实现类的继承

    class Dog extends Animal {
        constructor(name, age, color) {
            // 继承关键字 super
            super(name, age)
            this.color = color
        }
        getNameDog() {
            super.getName
        }
    }
    var dog = new Dog('旺财', 6, 'black and white')
    console.log(dog);
    console.log(dog.name);
    dog.eat()
    dog.getNameDog()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值