WPS宏(JSA)教程——类的扩展与继承
我们为什么要使用类?在JSA前面我们也讲过对象的创建不一定需要使用类:class calssName{}这样的语法结构,也可以使用其他形式。今天我们将来探讨这个问题。
为什么要使用类?
类是面向对象的基础,是所有面向对象编程语言的核心内容。而我们JSA也是一种面向对象的编程语言。
我们在讲到类的定义的时候,说到类是一创建某内对象的一个模板。这将使得我们在创建对象的时候少写很多代码。有人会说,我们前面所学的原型对象类型也可以做到如此啊。
事实上,在JSA的底层设计中,它们的本质是一样的。
为了做到代码重复利用,通常还会有要将原有类型扩展一下的需求。这种需求如果采用原型对象类型来实现,将会要写很多代码。因此类就应运而生了。子类是可以获得父类的所有属性的。同时子类还可以与父类不相同。
一个类只能扩展自一个父类,而一个父类则可以有很多个子类。
类的扩展与继承
继承是类的关键属性,这意味着一个对象可以“借用”另一个对象的大部分行为,同时覆盖或增强某些部分的逻辑。这会给子类带来子类并不需要的属性和方法。从而导致子类实例的属性变得臃肿、难以维护。
因此倾向于另外一种形式——派生类,派生类可以访问其父类的所有公有属性。在JSA中扩展是通过extends指明本类是扩展自哪一个类。
需要注意:
1、在构造器中,我们调用父类。在子类访问 this 之前,必须先调用 super()。
2、super() 调用父类的构造函数来初始化 this——super() 之前也可以有代码,但你不能在 super() 之前访问 this。在派生类中,可以通过super来访问父类的方法。
3、在父类完成对 this 的修改后,派生类才可以对其进行自己的逻辑。
4、派生类可以覆盖父类的方法、属性。
5、派生类也会继承父类的静态方法也会继承,故而也可以覆盖或增强这些静态方法
6、派生类的实例同时也是父类的实例。
示例,我们引用上一节内容:
//定义一个动物类,这个类目前就三个属性:性别,生日,名字
class Animal{
constructor(gendar,birthDay,name){
this.gendar = gendar;
this.birthDay = birthDay;
this.name = name;
}
}
//狗类,派生类自动物类,通过super来调用其父类中的构造函数
class Dog extends Animal{
constructor(gendar,birthDay,name){
super(gendar,birthDay,name);
}
}
//猫类,派生类自动物类,通过super来调用其父类中的构造函数
class Cat extends Animal{
constructor(gendar,birthDay,name){
super(gendar,birthDay,name);
}
}
//上面两个狗和猫的类就是由动物类派生出来的,能继承动物类的所有方法和属性。
//当我们要实例化一只狗的时候:
WangCai = new Dog('male','2023-7-2','旺财');
//我们再实例化一只猫
Garfield = new Cat('male','1977-7-2','加菲猫');
console.log(Garfield.name);//加菲猫
console.log(WangCai.name);//旺财
好了,以上是关于类的最后一部分内容。