简约风解析 javascript 原型及原型链

一般情况下,javascript中万物皆对象,它有两大类数据类型:

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)

js定义的变量,均为对象,它自身拥有_proto_这个指针,它指向构造它的对象的对象的prototype,prototype是一个属性,本身也是一个对象,因此prototype也有_proto_指针,如图所示

a这个变量是字符串,相当于new String('233'),构建它的对象为String, 据图可知,a._proto_ === String.prototype,即_proto_为指针,指向构造它的对象的对象 的prototype。

String, Number,Array,Object等,它们可以通过new关键字来创建,可说是Function的实例,而Function.prototype为匿名函数,如图,可证所有的函数都有prototype属性,拥有prototype属性的对象大部分(某些不能使用new关键字创建的工具函数,像Math)为函数,从此可以看出Function在js里是食物链的项端呀

看图分析:

person是Person的一个实例,综上所述,实例对象的_proto_指针是指向创建它的对象的对象的prototype,person实例是可以访问挂载在Person的原型上的say方法的,也就是说,_proto_是原型链上的节点,是一个关键节点,prototype是原型链的组成,当实例访问一个方法或属性时,它会先在自身查找,透过_proto_,然后再沿原型链找,找到则调用,没找到报错,如果原型链本身没有的话,它自身透过_proto_去查找它的原型链,直到Object.prototype(javascript中,对象的最终原型链为Object.prototype, Object.prototype._proto_ 为null)查到这个都没有的话,那就真的没有了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值