原型链问题

 

实例对象身上的__proto__指向谁?

  • 指向所属构造函数的 prototype;
  • 自定义构造函数Person new 出来的实例对象所属的构造函数是 Person;
  • 实例对象 __proto__ 指向 Person.prototype;

Person.prototype 的 __proto__ 指向谁(Person.prototype所属的构造函数)?

  • 因为Person.prototype 是一个对象数据类型(object);
  • 在 js 内所有的 object 数据类型都是属于 object 这个内置的构造函数;
  • Person.prototype 是 object 这个内置构造函数的实例对象;
  • Person.prototype 的 __proto__ 指向 object.prototype;

Person 的 __proto__ 指向谁(Person所属的构造函数)?

  • Person 是一个函数,函数本身也是一个对象,就会有 __proto__ 属性;
  • 在 js 内,所有的函数都是属于内置构造函数 Function 的实例;
  • Person.__proto__ 指向 Function.prototype;

object.prototype 的 __proto__指向谁?

  • object.prototype 是一个对象数据类型,只要是对象,都是所属 object 这个内置构造函数的;
  • object.prototype 的 __proto__ 指向 object.prototype(出现死循环),所以,object.prototype 在 js 内叫做顶级原型,不再拥有 __proto__ ;
  • object.prototype 的 __proto__ 指向 null;

object 的__proto__指向谁?

  • object 是一个内置构造函数,同时也是一个函数,同时也是一个对象;
  • 在 js 内,所有的函数都是属于内置构造函数函数 Function 的实例;
  • object 也是 Function 的实例;
  • boject.__proto__ 指向 Function.prototype;

Function.prototype 的 __proto__ 指向谁?

  • Function.prototype 也是一个对象数据类型;
  • 只要是对象数据类型,都是 object 的实例;
  • Function.prototype 的 __proto__ 指向 object.prototype;

Function 的 __proto__ 指向谁?

  • Function 也是一个内置构造函数,也是一个函数;
  • 在 js 内,所有的函数都是属于内置构造函数 Function 的实例;
  • Function 自己是自己的构造函数、自己是自己的实例对象;
  • Function 的构造函数是 Function;

只要是函数(内置构造函数、自定义构造函数),就会有 Prototype 原型对象属性和 __proto__ 属性:自定义构造函数 new 出来的所有实例对象属于对象数据类型,就会有 __proto__ 属性,通过其向上传递的特性,先指向其所属自定义构造函数的原型对象上,再指向 object(内部构造函数)的顶级原型对象上;自定义构造函数本身通过 __proto__ 属性,先指向其所属的 Function(内部构造函数)的原型对象上,再通过 Function 原型对象上的__proto__ 指向 object(内部构造函数)的顶级原型对象上。__proto__ 属性就像是接力棒,函数好比运动员,而原型对象就是运动员的手,最后一位就是内部构造函数 object 。


原型链:用 __proto__ 串联起来的对象链状结构,每一个对象数据类型,都有一个属于自己的原型链,用来访问对象成员。

对象访问机制:当需要访问对象成员时,首先在自身上查找,如没有,会自动去 __proto__ 上查找,再没有,继续向上访问,直到 object.prototype 都没有,则返回 undefined。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值