1. 原型的基本概念
在 JavaScript 中,每个函数都有一个prototype属性(注意,是函数才有这个属性,不是对象)。这个prototype属性指向一个对象,这个对象被称为函数的原型对象。当通过一个函数创建一个对象(使用new关键字)时,这个新创建的对象会自动拥有对函数原型对象的引用。
例如,对于一个简单的函数:
function Person() {
// 函数体
}
console.log(Person.prototype);
这里输出的Person.prototype就是Person函数的原型对象,它初始包含一个constructor属性,这个属性指向Person函数本身,即Person.prototype.constructor === Person。
2. 实例化和继承
3. ES6中class的继承
同时,在现代 JavaScript 开发中,也有一些基于类(ES6 中的class语法)的继承方式,这些方式在底层其实也是利用了原型链的原理,但语法上更加清晰和易于理解。
- class的基本概念
ES6 的class可以看作只是一个语法糖:
类的数据类型就是函数,类本身就指向构造函数:
类中的所有方法都定义在类的prototype属性上面,因此,在类的实例上面调用方法,其实就是调用原型上的方法:
- class的继承
Class 可以通过extends关键字实现继承,让子类继承父类的属性和方法;
ES6 规定,子类必须在其constructor()方法中调用super(),否则就会报错;