将上述问题用ES5语法实现
时间: 2024-09-15 15:05:33 浏览: 70
在JavaScript中,多态是通过原型链(prototype chain)和动态类型来实现的。ES5语法中的多态实现和在其他编程语言中有所不同,因为JavaScript是一种基于原型的语言,并不是严格面向对象的编程语言。在ES5中,我们可以通过创建对象的实例以及利用函数的原型链来实现多态。
以下是一个简单的例子来展示如何使用ES5语法来实现多态:
```javascript
// 定义一个基类函数
function Animal(name) {
this.name = name;
}
// 给Animal的原型添加方法
Animal.prototype.speak = function() {
console.log(this.name + " makes a noise.");
};
// 定义一个子类函数
function Dog(name, breed) {
// 调用基类构造函数,相当于基类的"super"
Animal.call(this, name);
this.breed = breed;
}
// 创建子类的原型,并将其指向基类的实例,实现原型链
Dog.prototype = Object.create(Animal.prototype);
// 修正子类构造函数的引用
Dog.prototype.constructor = Dog;
// 重写基类的方法,实现多态
Dog.prototype.speak = function() {
console.log(this.name + " says woof.");
};
// 创建Animal和Dog的实例
var animal = new Animal("Generic Animal");
var dog = new Dog("Buddy", "Golden Retriever");
// 调用方法,展示多态
animal.speak(); // 输出: Generic Animal makes a noise.
dog.speak(); // 输出: Buddy says woof.
```
在这个例子中,`Animal` 是一个基类,`Dog` 是一个子类。`Dog` 重写了从 `Animal` 继承来的 `speak` 方法,展示了多态性。当我们调用 `speak` 方法时,会根据实例的类型来调用对应的方法,这正是多态的体现。
阅读全文