object object什么意思_对原型、原型链、 Function、Object 的理解

468b609c6436461d63351d3aea62dbf9.png

问题

有如下代码:

//代码1
  • 问题1:画出代码1的原型图?
  • 问题2:从代码2你能得出什么结论?试画出原型图?
  • 问题3:解释代码3的原因?

-------------------------------------------------------------------------

解答:

在解答上面的问题之前,先记住下面几句话,这几句话能解释一切关于原型方面的问题:

  1. 当 new 一个函数的时候会创建一个对象,『函数.prototype』 等于 『被创建对象.__proto__』
  2. 一切函数都是由 Function 这个函数创建的,所以『Function.prototype === 被创建的函数.__proto__』
  3. 一切函数的原型对象都是由 Object 这个函数创建的,所以『Object.prototype === 一切函数.prototype.__proto__』

下面是代码1的原型图:

a31ef0fc8cfda295da6247fa0eaef4a3.png
  • (1)People函数创建了对象 p,所以People.prototype === p.__proto__;
  • (2)Object函数创建了People.prototype对象,所以Object.prototype === People.prototype.__proto__;
  • (3)People 作为对象的角色被函数Function创建,所以 Function.prototype === People.__proto__

下面是代码2的原型图:

0a8ce1ca26733be2cc4853581ad0ed40.png
  • (1)任何函数都是 Function 创建,所以Function 创建了 Function,所以 Function.prototype === Function.__proto__;
  • (2)Object 也是函数。所以Function创建了Object,所以 Function.prototype === Object.__proto__ ;
  • (3)Function.prototype 是普通对象,普通对象是由Object创建的,所以 Function.prototype.__proto__ === Object.prototype

关于代码3:

instanceof 的作用是判断一个对象是不是一个函数的实例。比如 obj instanceof fn, 实际上是判断fn的prototype是不是在obj的原型链上。比如: obj.__proto__ === fn.prototype, obj.__proto__.__proto__ === fn.prototype,obj.__proto__..._proto__ === fn.prototype,只要一个成立即可。

所以(根据图2来找)

  • 对于 Function instanceof Function,因为 Function.__proto__ === Function.prototype,所以为true。
  • 对于 Object instanceof Object, 因为 Object.__proto__.__proto__ === Function.prototype.__proto__ === Object.prototype , 所以为true
  • 对于 Function instanceof Object, 因为 Function.__proto__.__proto__ === Function.prototype.__proto__ === Object.prototype, 所以为 true
  • 对于 Object instanceof Function, 因为 Object.__proto__ === Function.prototype,所以为 true

至此,问题全被完美解决。

欢迎进群探讨技术,点击此微信扫码进群。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值