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.父类方法名
上一篇: 忆末心语·坠