es6(Class类)

Class类用法

传统方式构造函数,它的缺点在于,和普通函数一样,不利于区分,普通执行会产生全局变量,所以在es6提出了Class类的概念

        function Person(name, age = 0) {
            this.name = name
            this.age = age
            this.say = function(){
                console.log(this.name,this.age)
            }
        }
        var person = new Person('zhangsan')
        person.say() //zhangsan 0

每个Class类构造函数都有一个constructor函数

        class PersonA {
            constructor(name,age = 0){
                this.name = name
                this.age = age
            }
            say(){
                console.log(this.name,this.age)
            }
        }
        var personA = new PersonA('zhangsan',18)
        personA.say() //zhangsan 18

       console.log(typeof personA) //function --> 语法糖 糖衣语法

其实Class类构造函数里写的函数(只要不和constructor重名就行)是写在原型上的,而传统构造函数则不是,不信的话请看,区别显而易见

        console.log(personA.say===PersonA.prototype.say) //true
        console.log(person.say===Person.prototype.say) //false

Class类构造函数必须通过new操作符进行实例化,否则会报错

Class类继承

直接上代码

        class PersonB extends PersonA{
            constructor(name,age){
                super(name,age) //super 函数 代表调用父类构造函数
                this.like = 'banner'
            }
            say(){
                console.log(this.like)  //banner
                console.log(super.say()) // ha 30 -->super 对象 代表代表父类的原型 this 自动绑定子类
            } 
        }
        var personB = new PersonB('ha',30)
        console.log(personB) //ha 30

其实你会发现它比之前的圣杯模式继承会更简单,直观,这里多了两个关键字extends和supper,extends是Class类函数要继承至父类构造函数要用extends,而subber如果当函数使用代表调用父类构造函数,如果当对象使用代表父类的原型,同时具有自动绑定子类的功能

猜你喜欢

转载自blog.csdn.net/qq_42676363/article/details/82970597