[ES6] 对象访问机制

17 篇文章 1 订阅

对象访问机制

  • 当你访问一个对象的成员的时候, 会先在自己身上找
  • 自己没有, 去到 __proto__上找
  • 再没有, 去到 __proto__上找
  • 一直找到顶级对象的 __proto__都没有
  • 就返回 undefined

定义

  • 定义1: 每一个对象都有 __proto__
  • 随便一个实例化对象的 __proto__ 是所属构造函数的 prototype
  • 定义2: 每一个函数都有一个 prototype, 他是一个对象
  • 每一个构造函数的 prototype 应该也有 __proto__
  • 构造函数也是函数, 函数也是一个对象

只要是函数,就是Function的实例,构造函数也是

只要是对象,就是Object的实例,Function的原型对象也是

function Person(){
  this.name = 'Jack'
  this.age = 18
  this.gender = '男'
}

// 创建一个实例
let p1 = new Person()

在这里插入图片描述
定义:

  1. 每一个函数天生自带一个属性叫做prototype, 是一个对象
  2. 每一个对象天生自带一个属性叫做 __proto__指向所属构造函数的 prototype
  3. 当一个对象, 没有准确的构造函数来实例化的时候, 我们都看作是内置构造函数 Object的实例

例子:

  1. var arr = [], Array 的实例
  2. var obj = {}, Object 的实例
  3. var p1 = new Person(), Person 的实例
  4. var time = new Date(), Date 的实例
  5. var fn = function(){}, Function 的实例
  6. Person.prototype, Object 的实例
  7. Array.prototype, Object 的实例

结论:

  • 从任何一个对象开始出发,按照 proto 开始向上查找,最终都能找到 Object.prototype
  • 我们管这个使用 __proto__ 串联起来的对象链状结构, 叫做原型链
  • 原型链作用: 为了对象访问机制服务

注: 只要是函数, 就是大写Function的实例;,构造函数也是
只要是对象,就是Object的实例,Function的原型对象也是
内置构造函数 Object 是 内置构造函数 Function 的实例;
顶级对象一定是 Object 的 prototype, 函数的顶级一定是内置构造函数 Function

  • 原型 是每一个函数天生自带的一个对象空间, 在里面写方法是供实例使用的, 多个实例共享该方法
  • 原型链 是使用 __ proto__ 串联起来的对象链状结构, 是为了对象访问机制服务的
    它俩完全是两个概念
 function Foo(){  }

在这里插入图片描述

Foo()是个函数,也是对象,具有__proro__属性
只要是函数, 就是大写Function的实例;
__proto__指向所属构造函数的 prototype

Foo()的__proro__指向Function.prototype

Object ()是个函数,也是对象,具有__proro__属性
只要是函数, 就是大写Function的实例;
内置构造函数 Object 是 内置构造函数 Function 的实例;

Object 的__proro__指向Function.prototype

Function自身能够生成自身,即Function的原型就是Function。

Function的__proro__指向Function.prototype

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值