什么是原型、原型链
首先我们要搞明白原型的概念,什么原型?
每个对象都可以指定另一个对象来作为自己的原型,并继承原型的所有属性。那么对象当然是由构造函数创建的,那我们是不是就可以在声明构造函数的时候就指定一个对象作为原型,之后凡是由这个构造函数创建出来的对象都拥有共同的原型。每个构造函数在创建时都默认有一个prototype属性,用来指定原型。
function Student() {
this.study = function () {
console.log("学习");
}
}
function Person() {
this.live = function () {
console.log('生存');
}
}
Student.prototype = new Person()
var student = new Student()
student.live()//生存
student.study()//学习
构造函数通过prototype和原型建立联系,那么由构造函数创建出来的实例是否也可以与原型建立联系?在每个对象被创建的时候,都默认有一个__proto__属性。每个JS对象通过__proto__属性去获取和设置原型,对象与对象之间通过__proto__属性联系在一起形成一条链就是“原型链”,可能对概念还不是很清晰,看下图:
其中红色的就是原型链。由图可见Object.prototype的__proto__属性就是null了,也就是说原型链终止,原型链的顶点就是Object.prototype