Javascript 面向对象(ES6继承)
2019-10-18 本文已影响0人
龚达耶
ES6的继承我们运用了class语法糖这样可以更像我们经典的面向对象语言。
我们用class创造的类其实还是一个构造方法
class ddw{
constructor(x, y){
this.x = x;
this.y = y;
}
bart(){
console.log(this.x+this.y)
}
}
console.log(typeof ddw) // function
console.log(Ddw.prototype.constructor === Ddw) // true
所有我们定义的方法都会被实例继承
class Ddw{
constructor(x, y){
this.x = x;
this.y = y;
}
bart(){
console.log(this.x+this.y)
}
}
let gongxi = new Ddw(2,3)
gongxi.bart() //5
但如果我们加了static就不行了
class Ddw{
constructor(x, y){
this.x = x;
this.y = y;
}
static bart(){
console.log(this.x+this.y)
}
}
let gongxi = new Ddw(2,3)
gongxi.bart()
image.png
因为加了static表示只能通过类调用而不能通过实例继承
但是父类静态方法可以被子类继承
class Ddw{
constructor(x, y){
this.x = x;
this.y = y;
}
static bart(a, b){
console.log(a+b)
}
}
class Ddw2 extends Ddw {}
Ddw2.bart(2,3) // 5
我们也可以用super调用父类
class Ddw{
constructor(x, y){
this.x = x;
this.y = y;
}
static bart(a, b){
return a+b
}
}
class Ddw2 extends Ddw {
static bart2(a,b){
console.log('answer is '+super.bart(a,b))
}
}
Ddw2.bart2(2,3) //answer is 5
在子类中必须加入super()才能使用this,因为子类创建基于父类所以要super才能返回父类实例
是否继承可以用getPrototypeOf()判断
console.log(Object.getPrototypeOf(Ddw2) === Ddw) // true