ES6实现继承
// 父类
class Cat{
// 构造函数
constructor( a , b){
// 对象自身属性
this.name = a;
this.age = b;
// 实例对象上的函数
this.sayHi = function(){
console.log('喵喵喵');
}
}
// 实例对象的属性
type = 'animal'
// 原型对象上的方法直接在这里添加
sayMiao(){
console.log('hello喵');
}
// 如果要在类上添加静态方法,需要在函数前用关键字声明
static sayHello(){
console.log('静态方法');
}
}
// Cat.sayHello();
// let cat1 = new Cat( '小黑' , 5)
// console.log(cat1);
// 子类
// 继承关键字extends
class Son extends Cat{
constructor(a, b , f){
// 子类可以看做没有this,
//调用super方法后才可以操作,super传递参数给父类
super(a , b);
// 子类专属的值和方法设置
this.f = f
this.sonSay=function(){
console.log('子类实例对象的方法');
}
}
sontype = 'sontype';
// 子类原型上的方法
sonSayMiao(){
console.log('son喵');
}
// 子类的静态方法(构造函数上的方法)
static sonSayHello(){
console.log('sonSayHello');
}
}
let son1 = new Son('小白',5 , '猫')
- 用class定义一个‘类’,可以看到里面有一个constructor方法,这就是构造方法,二this关键字代表实例对象。简单说,constructor内定义的方法和属性是实例对象自己的,而constructor外定义的方法是所有实例对象可以共享的。
- class之间可以通过extends关键字实现继承
- super关键字,它指向父类的实力(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有的this对象,而是继承父类的this对象,然后对其进行加工。
- ES6的继承机智,实质是先创造父类的实例对消this,然后在用子类的构造函数修改this