我们在讲原型链前我们先把下面两个东西复习一下
原型(prototype)
以前我们都说万物皆对象
现在所有的对象都是通过new 构造函数创建的
所有的函数都有一个属性,prototype被称为函数原型
在默认的情况下,prototype是一个普通的对象,在prototype中有一个属性constructor,它也是一个对象,它指向构造函数本身
原型的应用
1.Object.getPrototypeOf(对象) 获取对象的隐式原型
2.对象 instanceof 构造函数 判断对象是否是这个函数构造出来的
3.Object.prototype.isPrototypeOf(对象) 判断Object.prototype是否在指定对象的原型链上
4.Object.Create(对象) 创建一个新对象,将新对象的隐式原型指向对象
5.Object.hasOwnProperty(属性) 判断属性是否是对象自身的属性
隐式原型(proto)
所有的对象都有一个属性__ proto__
在默认情况下,隐式原型指向创建该对象构造函数的原型
当查找一个对象成员时,看该对象自身是否拥有这个属性,如果有则直接使用。若没有则在原型链上依次查找是否拥有该属性,如果有则直接使用
原型链
每一个对象都有隐式原型,隐式原型指向形成的链条,就叫做原型链
Function的隐式原型指向自己的原型
Object的原型的隐式原型指向null
需要注意的地方
1
Object.prototype.___ proto___=== null
2
Function.prototype === Function.__ proto__
下面这张图就是我自己对原型链的理解所画的图(通俗易懂)
原型链的应用
主要用于继承,其实就是为了代码复用