js原型链图解

发布于:2022-12-31 ⋅ 阅读:(413) ⋅ 点赞:(0)

终极问题:啥是原型链他有啥作用?

1.讲解之前的必备小知识点

  1. 任何一个新对象都有一个属性叫做 __proto__ (这个东西看成指针)指向它的构造函数
  2. 任何一个构造函数都有一个属性叫做 prototype(原型) 他是一个对象存放了一个地址指向了它的原型对象(prototype object)
  3. 构造函数的原型对象它都有一个属性叫constructor(他也是个指针) 反过来指向这个构造函数。
  4. Js中万物皆对象所以结合第一点可以理解为你写的东西都有一个属性__proto__

上个例子图吧 光说你肯定记不得我猜的 哈哈哈

 

console.log(person1.__proto__ === Person.prototype); // true
console.log(Person.prototype.constructor === Person); // true

那么再来完善完善这幅图

 person中的__proto__和person的原型对象中的__proto__分别又指向哪里呢?

下面知识点又来咯

  1. 所有函数都是咋们的Function函数构造出来的(Function是最顶层的构造器)
  2. Function函数是顶层没人构造 (理解成自己构造自己吧)所以它的__proto__就指向它自己的原型对象

所以就有

 

console.log(Person.__proto__===Function.prototype); // true
console.log(Function.__proto__ === Function.prototype); // true
  1. 还有原型对象中的__proto__他是对象 所以~他肯定指向对象Object函数的原型对象嘛~(Object是最顶层的对象 但是他也是被Function构造出来的)。所以就有

console.log(Person.prototype.__proto__ === Object.prototype); // true
console.log(Function.prototype.__proto__ === Object.prototype); // true
console.log(Function.prototype.__proto__.__proto__ === null); // true
console.log(Person.__proto__.__proto__.__proto__ === null); // true

 最后Object的原型对象指向的是null (走到顶啦)

         

console.log(Object.prototype.__proto__); // null

所以总结

什么是原型链?

当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会通过__proto__属性去他的原型对象上查找,即它的构造函数的原型对象,如果还没有找到就又会通过构造函数的原型对象的__proto__属性继续向上查找,这样一层一层向上查找就会形成一个链式结构,这个链就被我们成为原型链

那原型链有什么作用?

他主要用于继承,存放一些公共属性和方法。

所以为何一个对象会拥有定义在其他对象中的属性和方法,说明他们有公共的原型对象嘛,通过继承原型对象上的方法去获得。

第一次写博客欢迎各位大佬佬指点~~~~


网站公告

今日签到

点亮在社区的每一天
去签到