定义:类抽象了对象的公共部分,泛指某一大类,而对象特指某一个,通过类实例化的一个具体的对象。
创建与使用:
class A1{
constructor(name,age){
console.log('123')
this.a1 = name,
this.a2 =age
//属性
}
b(){console.log('方法',this.a1)}
//方法
}
let a = new A1(1,2)
//实例化类
console.log(a.a1)
//使用类属性
a.b()
//使用类方法
输出:
123
1
方法 1
constructor(){}里面的内容是 new完类 就会立即执行。所以会先输出123。
若想让b方法在类实例化后直接执行,则:constrctor(){this.b()} 即可
类的继承:
情况1:son继承了father的属性与方法,并定义了son自己的属性与方法,与father无冲突
class father{
constructor(a,b){
this.a = a,
this.b = b
}
c(){console.log('father的a',this.a)}
}
class son extends father{
constructor(e){
super(3,4)
this.e = e
}
f(){console.log('son的方法f')}
}
let x = son(5)
console.log(x.a)//father的属性a
console.log(x.b)//father的属性b
console.log(x.e)//son的属性e
x.c()//用father的方法c
x.f()//用son的方法f
输出:
3
4
5
father的a 3
son的方法f
son 继承了father的属性和方法,实例化后使用起来和son自己定义的属性和方法并无其他区别。
继承格式为:class 子类 extends 父类{ constructor(){ super() } }
情况2:son继承了father的属性与方法,并定义了son自己的属性与方法,但son的属性名与方法名和father的属性名与方法名重名了
class father{
constructor(a,b){
this.a = a,
this.b = b
}
c(){console.log('father的a',this.a)}
e(){console.log('father的e方法',this.a)}
}
class son extends father{
constructor(a){
super(3,4)
this.a = a
}
c(){console.log('son的方法f')}
}
let x = son(5)
console.log(x.a)//son的属性a
console.log(x.b)//father的属性b
x.c()//son的方法c
x.e()//father的方法e,本来输出的是father的属性a,但由于重名,所以输出的是son的a属性。
输出:
5
4
son的方法f
father的e方法 5
son继承了father的属性与方法后再自己定义一遍与father重名的属性与方法,那么下面在使用时,就会显示son定义的属性与方法。
当son与father发生命名冲突时,son的优先级永远是最高的。