我看到某大神说JavaScript的三座大山:
1、原型与原型链
2、上下文环境与作用域
3、单线程与异步
说的非常正确,原型与原型链可以说是JS非常不容易理解的内容了,想要成为大神,这三座大山是必须要跨越,今天我们就来翻一下第一座大山——原型与原型链
每一个函数,都有一个prototype属性;每一个对象,都有一个proto属性。
我们来声明一个函数foo,看看它的prototype是什么:
在浏览器控制台我们得到了我们的结果:
我们熟知的JS内置对象,String、Number、Array等,都是由构造函数定义的,用typeof验证他们都是function,既然是function肯定都有prototype属性。
其实prototype属性是一个指针,指向一个对象,我们上面说了,每一个对象都有一个proto属性,
我们看看Array.prototype.proto指向谁。
大家看到指向了Object.prototype。那Object.prototype又指向谁呢?
指向了null,也就是说,原型链的顶端是null,“万物皆空”嘛!_
原型链就是通过隐形的proto链接以来的,继承也是隐形的proto实现的,instanceof也是通过隐形的proto一级一级向上查找的。今天就说这么多吧!大家可以上网查一下原型与原型链的指向图,相信你会有一个更深的认识。