多态性在JavaScript中的应用

多态性面向对象编程中的核心概念之一,它允许不同类型对象对同一方法、字段或属性的调用做出响应,每个响应都根据适当的类型特定行为进行。在JavaScript中,尽管没有像其他编程语言那样的接口,但有超类和子类。本文将通过一个简单的例子来演示如何在JavaScript中实现多态性。

多态性的主要使用场景是,对象能够响应相同名称的方法、字段或属性调用,但每种类型都有其特定的行为。程序员不需要事先知道对象的确切类型,因此确切的行为是在运行时确定的。这就是所谓的后期绑定或动态绑定,这也是多态性非常酷的一个特性。要求是,所有超类、子类和接口中必须有相同名称的属性和相同参数集。

JavaScript中使用多态性

JavaScript中,没有像其他编程语言那样的接口,但有超类和子类。可以通过创建一个继承自另一个类的类来实现多态性。下面是一个简单的例子,将创建一个名为Person的类,然后创建一个名为Manager的类,它继承自Person。这两个类都将包含一个名为wake_up()的方法。然后将创建这两种类型的对象,并将它们放入一个数组中。当遍历这个数组时,系统将调用每个对象的wake_up()函数,实现将动态确定。

首先,定义一个Person类,它包含id、name和age属性,以及wake_up()和get_age()方法。

Person = function (id, name, age) { this.id = id; this.name = name; this.age = age; } Person.prototype = { wake_up: function () { alert('A person is awake'); }, get_age: function () { return this.age; } }

接下来,创建一个继承类,以便其他类可以从Person类继承。

Inheritance_Manager = {}; Inheritance_Manager.extend = function (subClass, baseClass) { function inheritance() {} inheritance.prototype = baseClass.prototype; subClass.prototype = new inheritance(); subClass.prototype.constructor = subClass; subClass.baseConstructor = baseClass; subClass.superClass = baseClass.prototype; }

然后,定义Manager类,它继承自Person类,并添加了salary属性。

Manager = function (id, name, age, salary) { Manager.baseConstructor.call(this, id, name, age); this.salary = salary; } Inheritance_Manager.extend(Manager, Person);

为了展示多态性,重写Manager类的wake_up()方法。

Manager.prototype = { wake_up: function () { alert('I am in control with Polymorphism'); } } var arrPeople = new Array(); arrPeople[0] = new Person(1, 'Joe Tester', 26); arrPeople[1] = new Manager(1, 'Joe Tester', 26, '20.000'); for (var i in arrPeople) { arrPeople[i].wake_up(); alert(arrPeople[i].get_age()); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485