理解JavaScript的原型与原型链

我看到某大神说JavaScript的三座大山:
1、原型与原型链
2、上下文环境与作用域
3、单线程与异步
说的非常正确,原型与原型链可以说是JS非常不容易理解的内容了,想要成为大神,这三座大山是必须要跨越,今天我们就来翻一下第一座大山——原型与原型链

每一个函数,都有一个prototype属性;每一个对象,都有一个proto属性。

我们来声明一个函数foo,看看它的prototype是什么:

1c670003fc3601548088
1c670003fc3601548088

在浏览器控制台我们得到了我们的结果:
1c6a000288a76cf764ff
1c6a000288a76cf764ff

我们熟知的JS内置对象,String、Number、Array等,都是由构造函数定义的,用typeof验证他们都是function,既然是function肯定都有prototype属性。
1c680003f90c5546bf43
1c680003f90c5546bf43

其实prototype属性是一个指针,指向一个对象,我们上面说了,每一个对象都有一个proto属性,

我们看看Array.prototype.proto指向谁。

1c690001747fbefa9776
1c690001747fbefa9776

大家看到指向了Object.prototype。那Object.prototype又指向谁呢?
1c6d000165ff1d4b2f9b
1c6d000165ff1d4b2f9b

指向了null,也就是说,原型链的顶端是null,“万物皆空”嘛!_
原型链就是通过隐形的proto链接以来的,继承也是隐形的proto实现的,instanceof也是通过隐形的proto一级一级向上查找的。今天就说这么多吧!大家可以上网查一下原型与原型链的指向图,相信你会有一个更深的认识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容