深入理解原型和原型链

理解原型和原型链

[[Prototype]]

理解原型的概念首先要理解 [[Prototype]]:
所有的对象都有一个内置属性[[Prototype]],而这个属性是对其他对象的引用, 例子如下:
Object.create(),参数是个指定对象,这个函数的作用是创建一个对象,并且把这个对象的[[Prototype]]关联到指定的对象。

for inin 都是通过查找[[Prototype]]链的方式来枚举和判断属性是否存在。

[[Prototype]]的尽头就是Object.prototype

"类"函数

前面既然已经说过了,每个对象都有一个内置属性[[prototype]], 现在我们来看new操作符来生成一个实例的过程,如new Foo()
new Foo()会生成一个新函数,这个对象的内置[[prototype]]关联的是Foo.prototype对象

javaScript中对构造函数最准确的理解是:所有带有"new"的函数调用(因为随便哪个函数都可以使用new来创建一个对象)。

检查"类"的关系

  1. intanceof
    intanceof,左边是对象,右边是函数。a instanceof Foo表示在a的整条[[prototype]]链中是否有指向Foo.prototype的对象
  2. isPrototypeOf(),左边是对象右边是对象。b.isPrototypeOf©; 问的就是b是否出现在c的[[prototype]]链中。
  3. 在ES5中,直接获取一个对象的[[prototype]],标准方法是:
    Object.getPrototypeOf( );
  4. 绝大多数浏览器都可以使用一个非标准的方法来访问对象的内部[[prototype]]属性:
a.__proto__ === Foo.prototype; // true

对象关联

b = Object.create(a) 会创建一个新对象并把它关联([[prototype]])到我们指定的对象

Object.create(null)创建的对象的[[prototype]]指向的是空,这个对象无法进行委托,也没有原型链,空[[prototype]]的对象通常被称为"字典",它们完全不会受到原型链的干扰,因此非常适合用来存储数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值