原型和原型链的理解

107 阅读1分钟

目录
1.什么是原型和原型链?
2.原型链的作用?
3.原型链的特点?
4.关于__proto__和prototype?

1.什么是原型和原型链?

js:万物皆对象,可知源头就是object。
原型:

  1. 所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象。
  2. 所有函数都有一个prototype(原型)属性,属性值是一个普通的对象。
  3. 所有引用类型的__proto__属性指向它构造函数的prototype

原型链:
     理解为一条链子,一条链接原型对象和实例对象链子。在访问一个对象的属性时,先会在自身的属性查找,通过__proto__原型上查找,也就是他的构造函数prototype里面查找,还是找不到的话,会在往上查找也就是prototype.__proto__查找,就这样一层一层查找直到为null才结束。

2021-05-12_103958.png

2.原型链的作用?

  1. 以重复使用,优化代码,实现继承。
  2. 函数的所有实例都可以访问构造函数原型中的方法和属性

3.原型链的特点?

实现了继承。
但是存在两个问题:

  • a包含引用类型值的原型属性会被所有实例共享。
  • b在创建子类型时,无法向超类型的构造函数中传递参数。

4.关于__proto__(隐显原型)和prototype(显示原型)?

  1. __proto__是每个对象都有的一个属性,而prototype是函数才会有的属性。
  2. __proto__指向的是当前对象的原型对象,而prototype指向的,是以当前函数作为构造函数构造出来的对象的原型对象。

两个的关系: __proto__隐式原型指向创建这个对象的函数(constructor)prototype