为了提高效率效率,我们通常会用到重载和重写两种那个方式。
一、重载
重载:方法名称相同,参数的类型或者个数不同。
重载是面向对象编程的一种特有的方法,它允许一个函数在实现的过程中有多个入口,而且只需要实现一次
方法重载示例:
function overload(x: string, y: string): void;
function overload(x: number, y: number): number;
function overload(x: number, y: number, z: number): number;
function overload(x: any, y: any, z?: number): any{
// 使用 ?: 来表示可选参数
if (typeof y === 'number' && !z) {
return x + y;
}
if (z) {
return x + y + z;
}
console.log(`test ${x} ${y}`);
}
console.log(overload(20, 30)); // 50
console.log(overload(20, 30, 40)); // 90
overload('xtest', 'ytest'); // test xtest ytest
构造器重载示例:
class Overload{
overload(x: string, y: string): void;
overload(x: number, y: number): number;
overload(x: number, y: number, z: number): number;
overload(x: any, y: any, z?: number): any{
// 使用 ?: 来表示可选参数
if (typeof y === 'number' && !z) {
return x + y;
}
if (z) {
return x + y + z;
}
console.log(`test ${x} ${y}`);
}
}
var ol = new Overload();
console.log(ol.overload(20, 30)); // 50
console.log(ol.overload(20, 30, 40)); // 90
ol.overload('xtest', 'ytest'); // test xtest ytest
通过上述代码,我们可以看出重载会根据参数来决定要从对应的入口进入并执行代码块。
二、重写
重写:方法名称,参数名称,返回值类型全部相同
特点:当父类和其派生类拥有同一个方法时,这种情况就是方法的重写
作用:在拥有父类方法特征的同时,自身也可以有一些特有的特征
class Person {
major(){
console.log('计算机专业');
}
}
class Student extends Person {
constructor() {
super()
}
major() {
console.log('航天工程专业')
super.major()
}
sex() {
}
}
var student = new Student();
student.major();
// 航天工程专业
// 计算机专业
通过上述代码,方法重写相当于是js原型链查找过程。( 移步到原型链文章 ).
注意:js不支持方法重载,同名方法会被最后装载的方法覆盖。