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

为什么String.prototype.__proto__ == Object.prototype?

为什么String.prototype.__proto__ == Object.prototype?

LEATH 2019-05-12 09:16:30
已知__proto__指向的是对象构造函数的原型,而String.prototype的构造函数应该是String而非Object,所以为什么String.prototype.__proto__==Object.prototype是true?
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

不太赞成上面的回答,主要是但凡是一个对象,下面的表达式就成立这句话
你问的这个问题就是原型链,网上随便搜都一大把,在这里问,很少有人会给你讲一大堆,说的明明白白的,所以最好在去网上搜下,彻底理解下这块
原型链中可以分为三个角色:构造函数,父对象,子对象
构造函数就是一个函数,如Object、Function、String、Array乃至一个最普通的自定义函数,构造函数在创建的时候会在内存中同时创造一个对象,也就是原型对象,我们可以使用函数.prototype来访问这个对象
子对象是由构造函数new出来的,在new的同时会将子对象继承父对象,也就是原型对象,具体体现在子对象.__proto__===父对象
理解了上面的三角关系,理解原型链也就不难了
原型链可以看成一条祖孙链,最顶层是null(这是js历史遗留问题),其次是Object.prototype,第三层就是Function.prototype、String.prototype等
当我们创建一个对象时,可以使用vara={}或者vara=newObject()这时候a对象继承于Object.prototype,这可能是上面仁兄的依据,但是当我们创建一个对象b继承于a的时候,那么b与Object.prototype就是爷孙的关系了
另外函数,数组也是对象,functiona(){},此时a是一个函数,继承于Function.prototype,那么他与Object.prototype也是爷孙关系
这里就不再多讲了,不是三言两语能讲清的,还是那句话,多去网上查阅下资料,多方求证下
这里推荐下我之前写的一篇文章从数据类型讲原型原型链,可以到最后面看原型链部分
                            
查看完整回答
反对 回复 2019-05-12
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

先不管String.prototype指向的东西代表什么,String.prototype指的是一个对象字面量
String.prototypeinstanceofObject//true
但凡是一个对象字面量,下面的表达式就成立
obj.__proto__==Object.prototype//true
综上所述
String.prototype.__proto__==Object.prototype//true
不想在这里说那么多,但是也没他说的那么复杂给你推荐本书吧javascript面向对象编程指南end
                            
查看完整回答
反对 回复 2019-05-12
  • 2 回答
  • 0 关注
  • 544 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信