欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

es6 Class通俗理解方式

程序员文章站 2022-05-13 20:02:27
...
// 注意类没有函数声明提升,所以在实例化的时候,必须写在实例化之前,
  class Person{
    constructor(name,age){//这个函数,在该类实例化的时候,就会立即执行,那么这里一般放各种属性,或者实例化立即需要执行的方法
      this.name=name 
      this.age=age
      
      this.show() //如果是事件,需要实例化一遍
    }
    setShow(){
      console.log(this.name)
    }
    show(){
      console.log(this.name)
      //注意这里面再用函数,需要注意调用的this.尾部可以用bind(this)去更改this的指向
      this.func=function huidiao(){
          如果不更改,则this会指向func
      }.bind(this)//改变当前函数内的this指向 
      //当然或者使用es6的箭头函数,
    }
    del(){
        console.log(123)
    }
    //下面的set和get 一般用于框架封装,不会用到
    set aaa(val){
      //
      //set是设置属性的 存值函数
        console.log('设置aaa的属性的,设置的属性值为val')
    }

    get bbb(){
      //这个括号里面是不带参数
      //get 获取数据
      return '123'+this.name
    }
    static state(){
      //这是静态方法,不需要去实例化 new Person
      console.log('静态方法')
    }
  }
  Person.state() //静态方法,直接用类名调用里面的静态方法
  // let aa=new Person(123)
  // aa.setShow()

  //第一个子类 第二个父类 继承父类
  class Student extends Person{
    //super就是可以看做已经实例化的父类 直接拿参数,或者点方法.不覆盖父类的方法
    //如果写了构造器,会覆盖隐式的构造器,并且需要super()
     constructor(name,newstate){
      super(name) //该段继承父类name 把父类的代码直接拉过来了
      //子类需要继承父类的属性,那么必须super()  相当于把父类的constructor()拉过来了,
      //constructor(name)  super(name)  则可以拿到父类的属性,如果还需要其他的属性,继续添加
      this.newstate=newstate //这个是子类的自己的添加的属性
      
      this.show()
     }    
     show(){
        // 如果子类和父类的函数名称一样,会冲掉父类的相同名的方法,
        super.show() //super就是父类,父类调用一个父类内的方法,所以还是会执行show内的方法,不会覆盖之前的
        ....//子类的方法
     }
  }
 
  let stu=new Student('新的学生')
  console.log(stu.name)

 第一  有基于父类扩展方法,在初始化函数constructor内,需要super并传入父类实例必须的参数

第二 调用任意父类方法,super.父类方法名

 

相关标签: class