为了账号安全,请及时绑定邮箱和手机立即绑定

原型与原型链

标签:
JavaScript

本篇文章将简单介绍一下原型以及原型链的概念。

1.原型(公用属性)

    首先,我们来讲讲浏览器的初始状态,就是在无代码的情况下,浏览器所分配到的内存的使用情况,首先浏览器会创建一个全局对象global,而在这个全局对象global内含有许多的全局函数,例如global.parseInt、global.parseFloat、global.Number、global.String、global.Boolean、global.Object等等,函数也是对象的一种,因此也会具有属性,其中一种属性为prototype,这个属性的含义便是函数的原型对象。
    另一方面,通过这些函数如Number()、String()、Object()所构建出来的对象,都会拥有着一个属性__proto__,这个属性的value指向创建该对象的构造函数的原型对象,如:

var a=new Number(1)
a.__proto__===Number.prototype



    除函数Object以外的其他函数的原型对象在最后均会通过__proto__指向函数的原型对象,即Object.prototype,而函数Object的原型对象最后会通过__proto__指向null

    总之,所有的对象都有__proto__属性,而只有函数有prototype属性。

    另外,这里说的指向并不是说使用指针,而是引用的意思。

2.原型链

    在简单介绍了原型之后,我们可以和上面说法一样进行画图,便会构造出许许多多像链条一般的模型,这种模型称为原型链,具体画图如下:


webp

原型链.png

关于原型链,你需要的知道的是:
var XXX=new YYY()
XXX的类型是对象,即'object',YYY的类型是函数对象。
即:对象.__proto__===函数.prototype
这条等式适用于所有的原型链,两边都指向同一个对象,或者说是同一个对象的引用。


于是乎,我们就能拓展出下面的等式:
函数.prototype.__proto===Object.prototype
(这条等式成立的原因,是因为函数的原型对象也是一个普通的对象,因此它的原型等于它的构造函数的原型对象,即Object.prototype

函数.__proto__===Function.prototype
(通过typeof可知函数的类型是'Function',即有var f=new Function(),所以有此等式,当然,函数也是对象的一种)

Function.__proto__===Function.prototype
(这条等式成立的原因,是因为Function本身也是函数,因此Function.__proto__Function.prototype指向同一个Function原型对象)

Function.prototype.__proto__===Object.prototype
(这条等式成立的原因,正如在介绍原型的时候所说:除函数Object以外的其他函数的原型对象在最后均会通过__proto__指向函数的原型对象,即Object.prototype



本教程版权归饥人谷_宣泽彬和饥人谷所有,转载须说明来源



作者:宣泽彬
链接:https://www.jianshu.com/p/6d46d6eb127e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消