JavaScript 面向对象编程之多态

Author: Guang

在面向对象编程(OOP)中,多态(Polymorphism)是指同一操作或方法在不同对象上有不同表现形式的能力。简而言之,多态允许不同类的对象在调用相同的方法时表现出不同的行为。在JavaScript中,对象的多态性是与生俱来的。基于原型机制产生的属性遮蔽行为,可以很自然地覆盖原型上的方法。根据接收参数的不同,同样的方法调用可以轻易地表现出不同的行为。

常见的两种实现方式

  • 覆盖。子类重新定义父类方法,不同的子类可以自定义实现父类的方法。
  • 重载。多个同名但参数不同的方法。ECMAScript中没有重载的概念,但是JavaScript函数可以对同名函数中不同类型的传参做出不同行为的响应。算是某种意义上的重载。

在子对象上覆盖父对象的方法

class Person {
    constructor(name, age) {
        this.name = name;
    }

    introduce() {
        return 'My name is ' + this.name;
    }
}

class Engineer extends Person {
    constructor(name, age, job) {
        super(name, age);
        this.job = job;
    }

    introduce() {
        return 'My job is ' + this.job;
    }
}

const person = new Person('Guang', 32, 'Software Engineer');
const engineer = new Engineer('Guang', 32, 'Software Engineer');

console.log(person.introduce()); // 输出:"My name is Guang"
console.log(engineer.introduce()); // 输出:"My job is Software Engineer"

在这个示例中,Person类和Engineer类都实现了introduce方法,但Engineer重写了该方法来提供不同的行为。根据personengineer的不同类型,调用了不同的 introduce 方法。

重载

function add(a, b) {
    return a + b;
}

console.log(add(1, 2)); // 输出 3
console.log(add('1', '2')); // 输出 "12"

根据输入参数的类型,add()函数相应了不同的行为,对两个数字,进行了数字加操作,对两个字符串,进行了字符串拼接操作。这是一个简单的重载示例。

发表留言

历史留言

--空--