es6 Class通俗理解方式

// 注意类没有函数声明提升,所以在实例化的时候,必须写在实例化之前,
  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.父类方法名

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值