返回
ES5与ES6的继承:开拓面向对象编程的新篇章
前端
2023-09-16 00:34:14
ES5的原型链继承
在ES5中,继承机制主要依赖原型链。每个对象都有一个原型对象,原型对象又可能拥有自己的原型对象,以此类推,最终形成一条原型链。子对象可以通过原型链继承父对象的方法和属性。
原型链继承的实现
在ES5中,我们可以使用Object.create()
方法来创建一个新对象,并将另一个对象作为其原型对象。例如:
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}.`);
};
const john = new Person('John Doe');
在这个例子中,Person()
是一个构造函数,它创建了一个新的Person
对象,并将其赋值给变量john
。同时,Person()
还创建了一个原型对象,该原型对象拥有一个greet()
方法。john
可以通过原型链继承该方法。
ES6的类继承
ES6引入了class
,可以使用它来定义一个类。类是一种特殊的函数,它可以创建对象实例。类继承是通过extends
关键字实现的。
类继承的实现
在ES6中,我们可以使用class
关键字来定义一个类,并使用extends
关键字来继承另一个类。例如:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
class Student extends Person {
constructor(name, major) {
super(name);
this.major = major;
}
study() {
console.log(`${this.name} is studying ${this.major}.`);
}
}
const john = new Student('John Doe', 'Computer Science');
在这个例子中,Person
类是一个父类,Student
类是一个子类。Student
类继承了Person
类的所有方法和属性,并添加了一个新的方法study()
。john
是Student
类的一个实例。
ES5和ES6继承机制的比较
特征 | ES5 | ES6 |
---|---|---|
继承方式 | 原型链继承 | 类继承 |
语法 | 使用Object.create() 方法创建对象并指定原型对象 |
使用class 关键字定义类并使用extends 关键字继承另一个类 |
实例化对象 | 使用new 关键字实例化对象 |
使用new 关键字实例化对象 |
访问父类方法和属性 | 通过原型链访问父类的方法和属性 | 通过super 关键字访问父类的方法和属性 |
扩展父类 | 可以通过修改原型对象来扩展父类 | 可以通过定义新的方法和属性来扩展父类 |
总结
ES5和ES6的继承机制有着本质的不同。ES5采用原型链继承,而ES6则采用了类继承。类继承更加简单直观,而且更符合面向对象编程的理念。在实际开发中,我们应该根据项目的具体情况来选择合适的继承机制。