super关键字 - 从构造函数到方法,深入解析
2023-10-22 01:07:23
super概述
super关键字是ES6中引入的一个重要特性,它可以用于访问父类的构造函数和方法。super关键字既可以当作函数使用,也可以当作对象使用。
super作为函数调用时,代表父类的构造函数。在子类的构造函数中,可以使用super()来调用父类的构造函数,从而初始化子类实例的属性。
super作为对象使用时,代表父类的原型对象。在子类的实例方法中,可以使用super来访问父类原型对象上的属性和方法。
super关键字作为函数使用
super关键字作为函数调用时,代表父类的构造函数。在子类的构造函数中,可以使用super()来调用父类的构造函数,从而初始化子类实例的属性。
例如,以下代码定义了一个父类Person,它具有一个name属性和一个sayHello方法:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, my name is ${this.name}!`);
}
}
以下代码定义了一个子类Student,它继承自Person类。在Student类的构造函数中,使用了super()来调用父类的构造函数,并将name参数传递给父类的构造函数,从而初始化子类实例的name属性:
class Student extends Person {
constructor(name, school) {
super(name); // 调用父类的构造函数
this.school = school;
}
}
现在,我们可以使用Student类来创建学生实例:
const student = new Student('John', 'MIT');
此时,student实例将具有name和school两个属性,并且可以调用sayHello方法:
console.log(student.name); // John
console.log(student.school); // MIT
student.sayHello(); // Hello, my name is John!
super关键字作为对象使用
super关键字作为对象使用时,代表父类的原型对象。在子类的实例方法中,可以使用super来访问父类原型对象上的属性和方法。
例如,以下代码定义了一个父类Person,它具有一个name属性和一个sayHello方法:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, my name is ${this.name}!`);
}
}
以下代码定义了一个子类Student,它继承自Person类。在Student类的实例方法sayGoodbye中,使用了super来访问父类原型对象上的sayHello方法:
class Student extends Person {
constructor(name, school) {
super(name); // 调用父类的构造函数
this.school = school;
}
sayGoodbye() {
super.sayHello(); // 调用父类的sayHello方法
console.log(`Goodbye, my name is ${this.name}!`);
}
}
现在,我们可以使用Student类来创建学生实例:
const student = new Student('John', 'MIT');
此时,student实例将具有name和school两个属性,并且可以调用sayHello和sayGoodbye两个方法:
console.log(student.name); // John
console.log(student.school); // MIT
student.sayHello(); // Hello, my name is John!
student.sayGoodbye(); // Goodbye, my name is John!
super关键字的注意事项
在使用super关键字时,需要注意以下几点:
- super关键字只能在子类的构造函数或实例方法中使用。
- super关键字作为函数调用时,必须放在子类的构造函数的第一行。
- super关键字作为对象使用时,可以放在子类的实例方法的任何位置。
- super关键字只能访问父类原型对象上的属性和方法,不能访问父类实例上的属性和方法。
结语
super关键字是ES6中引入的一个重要特性,它可以用于访问父类的构造函数和方法。super关键字既可以当作函数使用,也可以当作对象使用。super作为函数调用时,代表父类的构造函数。super作为对象使用时,代表父类的原型对象。理解和掌握super关键字的用法,对于编写可重用、可维护的代码非常重要。