粗暴简析原型与原型链

时间:2021-2-20 作者:admin

一、prototype或__ proto__是什么?

1. prototype、__ proto__是什么?

  • prototype,中文名称为原型对象,是一个对象
  • __ proto__也称为原型对象,不过与prototype不同的是,它是一个私有属性,指向它的构造函数的原型对象(prototype )

2. 谁拥有 prototype、__ proto__ 这个对象属性

  • 每一个函数都会生成一个 prototype 对象,同时也会生成私有属性 __ proto__

  • 构造函数(一个特殊的函数): 可以通过new来 新建一个对象 的函数,构造函数有 prototype 对象。比如 Array、Number等就是构造函数
    • 实例: 通过构造函数和new创建出来的对象,便是实例。
    • 每个实例都有一个 __ proto__ 的属性
    • 实例通过__proto__指向原型,通过constructor指向构造函数。

  • 每个实例都拥有 __ proto__ 属性

总结:每个实例对象都有__ proto__属性,函数都有prototype和 __ proto__属性

3. prototype与__ proto__ 的关系

实例对象的__ proto__指向它的构造函数的原型对象(prototype )

如一个函数 fn

二、原型链是什么?

在JavaScript中,当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾(即直到一个对象的原型对象为 null)。即__ proto__将对象和原型连接起来组成了原型链

三、总结

  1. 函数的 prototype 是一个对象
  2. Function 是所有函数对象的爸爸,所有函数对象都可以通过 __ proto__ 找到它
  3. Object 是所有对象的爸爸,所有对象都可以通过 __ proto__ 找到它,Object 的 __ proto__指向 null
  4. 对象的__ proto__ 属性指向它的构造函数的原型对象,__ proto__ 将对象和原型连接起来组成了原型链
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。