下面就给您详细讲解“javascript 面向对象全新理练之继承与多态”的完整攻略:
什么是继承与多态?
继承是面向对象编程的一个重要概念,它指的是创建一个新类时可以基于现有类来创建,从而继承现有类的属性和方法,减少重复代码。多态是指同一个方法可以在不同的情况下表现出不同的行为。
在 JavaScript 中,继承是通过原型链来实现的,而多态则是基于JavaScript的动态类型特性实现的。
原型链中的继承
原型链是 JavaScript 中实现继承的一种机制,每个对象都有一个__proto__
属性,它指向原型对象,而原型对象又有自己的原型对象,层层向上形成一个原型链。
我们可以通过创建一个实例对象来实现继承,即新建一个对象原型与被继承的父对象的原型相同,从而继承父对象的属性和方法。
示例代码:
// 父类
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log(`I am ${this.name}`);
}
// 子类
function Dog(name) {
Animal.call(this, name); // 继承父类属性
}
Dog.prototype = Object.create(Animal.prototype); // 继承父类方法
Dog.prototype.constructor = Dog; // 修复constructor
Dog.prototype.sayHello = function() { // 子类方法重写
console.log(`I am ${this.name}, I am a dog`);
}
// 实例化子类对象
const dog = new Dog('Tom');
dog.sayHello(); // I am Tom, I am a dog
在上面的示例代码中,我们先定义了一个父类 Animal,在其原型对象中添加了一个 sayHello 方法;然后我们定义了一个子类 Dog,调用了父类的构造函数,并使用 Object.create()
方法继承父类的原型对象;最后我们重写了子类 Dog 的 sayHello()
方法,并使用了 new
关键字实例化子类对象,最终运行 sayHello()
方法输出结果。
多态
在 JavaScript 中,即使是相同的函数,也可以在不同的对象中产生不同的行为,这就是多态。
示例代码:
// 父类
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log(`I am ${this.name}`);
}
// 子类
function Dog(name) {
Animal.call(this, name);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.sayHello = function() { // 重写父类 sayHello 方法
console.log(`I am ${this.name}, I am a dog`);
}
// 子类
function Cat(name) {
Animal.call(this, name);
}
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;
Cat.prototype.sayHello = function() { // 重写父类 sayHello 方法
console.log(`I am ${this.name}, I am a cat`);
}
// 实例化子类对象
const dog = new Dog('Tom');
const cat = new Cat('Lily');
dog.sayHello(); // I am Tom, I am a dog
cat.sayHello(); // I am Lily, I am a cat
在上面的示例代码中,我们定义了两个子类 Dog 和 Cat,它们都继承了 Animal 类并重写了父类的 sayHello 方法,在使用实例化对象调用 sayHello 方法时,将输出不同的结果,这就是多态的体现。
总结
这篇攻略主要讲解了 JavaScript 中的继承与多态,在继承方面,我们介绍了使用对象的原型链实现继承的方法,以及如何在子类中重写和继承父类的方法和属性;在多态方面,我们通过示例代码演示了如何在不同的对象中使用相同的方法实现不同的行为。
希望通过这篇攻略,大家能够对 JavaScript 中的继承与多态有更深入的了解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript 面向对象全新理练之继承与多态 - Python技术站