JavaScript中的继承可以通过原型链实现,也可以使用ES6中新增的class语法糖来实现。
- 原型链继承
在JavaScript中,每个对象都有一个指向其原型对象的链接(也称为__proto__)。当在对象上访问一个属性时,如果该属性在对象上不存在,JavaScript引擎会自动查找原型链上的属性。因此,可以通过将一个对象的原型指向另一个对象来实现继承。
下面是一个使用原型链实现继承的简单示例:
function Animal(name) {
this.name = name;
}
Animal.prototype.sayName = function() {
console.log('My name is ' + this.name);
}
function Dog(name) {
this.name = name;
}
Dog.prototype = new Animal();
let dog = new Dog('Tom');
dog.sayName(); // 输出 "My name is Tom"
在上面的示例中,定义了一个Animal构造函数,它包含一个sayName方法。然后,通过将Dog的原型指向Animal的实例,实现了Dog继承自Animal。最后创建了一个Dog实例,并通过调用sayName方法来验证继承是否成功。
- class语法糖实现继承
ES6中引入了class语法糖,它提供了一种更直观的方式来定义类和继承关系。使用class语法糖可以更方便地实现继承。
下面是使用class语法糖实现继承的示例:
class Animal {
constructor(name) {
this.name = name;
}
sayName() {
console.log('My name is ' + this.name);
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
}
let dog = new Dog('Tom');
dog.sayName(); // 输出 "My name is Tom"
在上面的示例中,使用class关键字定义了Animal和Dog两个类。通过使用extends关键字,Dog类继承自Animal类,并使用super关键字在构造函数中调用父类的构造函数。最后创建了一个Dog实例,并通过调用sayName方法来验证继承是否成功。
无论是使用原型链还是使用class语法糖实现继承,都需要注意继承链中各个构造函数的调用顺序,以及原型链上属性的查找顺序。
正文完