ES6新特性--class类的使用

什么是类?

1、类是面向对象编程语言的通用结构。2、类是一种结构:将现实世界中存在的关系,采用一种{}的形、式,将各种数据和数据的操作捆绑到一起:外界不需要知道里面到底是怎么实现的,只需要调用里面提供的可操作的方法(封装)。

3、比原型方式要简洁的多,结构层面更加清晰。

语法操作

类class是ES6的新特性

类的语法:class 类名 {}

类名不能重复

.类不会自动运行:需要new的时候才会触发

.只要对象产生:new出一个对象:里面的构造器就会被触发

 方法实现

类里面的方法:方法名 + () + {},不需要function关键字(代表当前方法挂载Student.prototype

类实例化得到的对象,可以直接调用方法

代码:

// function Student(name){
//             this.name=name
//         }
       // 直接通过class进行类的创建
        class Student{//当用户new Student对象的时候:new出来的对象会自动调用的方法
            constructor(name,age){//创造属性:this永远代表对象
                this.name=name
                this.age=age
            }
            eat(){
                console.log(this.name+"正在吃")
            }
        }
        let s1=new Student("王一",21)// 构造器被调用了:只要有new对应的类就会被触发,产生一个对象 -- 实例化
        s1.eat()

 

     类的继承extends

   子类继承父类:extends关键字

  继承效果:子类对象可以访问父类中提供的属性或者方法

class People{
            constructor(name,age){
                this.name=name
                this.age=age
                console.log("我是父类构造器")
            }
            eat(){
                console.log(this.name+"正在吃")
            }
        }
        //继承 extends 父类
        class Student extends People{
           
           
     }
          // 实例化子类对象
        let s1=new Student("王一",21)// 调用类构造器(父类的:继承得来的)
        s1.eat() 

 

 

子类的属性如果与父类重名:会替换掉。
子类的方法如果与父类重名:在使用的时候只能访问到自己,如果非要访问父类的,必须使用super()

1、普通方法的覆盖,super.父类被覆盖的方法()

 class Father {
            name = 'father';

            sa() {
                console.log(this.name);
            }
        }

        class Sun extends Father {
            name = 'sun';       // 属性的覆盖----替换,内存中只有一个name属性:值为sun

            // 方法重写
            sa() {
                // 需要在子类的方法中使用super.被子类覆盖的方法sa()
                super.sa();  // 调用父类(方法存在于原型:Son和Father的原型不同,所以不可能覆盖)
            }
        }

  // 实例化:子类
       let s = new Sun();
        s.sa();

 

 

super()方法:父类的构造函数

子类是可以重构父类的

 class People{
            constructor(name,age){
                this.name=name
                this.age=age
            }
            eat(){
                console.log(this.name+"正在吃")
            }
        }
        //继承 extends 父类
        class Student extends People{
            //super()方法:父类的构造函数
            constructor(name,age,height){
                       // 父类有构造方法:那么子类的构造方法必须先访问父类的构造方法
                super(name,age)
                     // 只要在构造方法使用this之前调用父类的构造方法就可以运行代码
                this.height=height
            }
            //子类是可以重构父类
            eat(){
                console.log("子类重构了")
            }

        }
        let s1=new Student("王一",21,189)
        s1.eat()
        console.log(s1)

1、 继承之后,如果子类中没有定义,就会沿用父类中的方法或属性

2、子类对父类的方法和属性可以进行重构和重载

3、 但是,如果是继承的父类中有定义构造函数, 就必须加一个super(),然后接着添加子类的构造方法,不能将父类中的构造函数覆盖

4、super()是对父类构造器的一个引用,相当于父类中的constructor()方法直接写入到了子类中

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值