理解JavaScript的原型与原型链

我看到某大神说JavaScript的三座大山:
1、原型与原型链
2、上下文环境与作用域
3、单线程与异步
说的非常正确,原型与原型链可以说是JS非常不容易理解的内容了,想要成为大神,这三座大山是必须要跨越,今天我们就来翻一下第一座大山——原型与原型链
每一个函数,都有一个prototype属性;每一个对象,都有一个proto属性。
我们来声明一个函数foo,看看它的prototype是什么:

理解JavaScript的原型与原型链
文章图片
1c670003fc3601548088
在浏览器控制台我们得到了我们的结果:
理解JavaScript的原型与原型链
文章图片
1c6a000288a76cf764ff
我们熟知的JS内置对象,String、Number、Array等,都是由构造函数定义的,用typeof验证他们都是function,既然是function肯定都有prototype属性。
理解JavaScript的原型与原型链
文章图片
1c680003f90c5546bf43
其实prototype属性是一个指针,指向一个对象,我们上面说了,每一个对象都有一个 proto属性,
我们看看Array.prototype.proto指向谁。

理解JavaScript的原型与原型链
文章图片
1c690001747fbefa9776
大家看到指向了Object.prototype。那Object.prototype又指向谁呢?
理解JavaScript的原型与原型链
文章图片
1c6d000165ff1d4b2f9b
指向了null,也就是说,原型链的顶端是null,“万物皆空”嘛! _
原型链就是通过隐形的 proto链接以来的,继承也是隐形的 proto实现的,instanceof也是通过隐形的 proto一级一级向上查找的。今天就说这么多吧!大家可以上网查一下原型与原型链的指向图,相信你会有一个更深的认识。 【理解JavaScript的原型与原型链】

    推荐阅读