本文最后更新于 2024-03-23T16:33:41+00:00
                  
                  
                
              
            
            
              
                
                在 JS 中,每个用function定义的函数,都有prototype属性,指向一个普通对象,该对象存储的数据可供其实例使用。
在 JS 中,每个对象都有__proto__属性,指向一个普通对象,该对象存储的数据可供其使用。
结合上面两句话,得出的结果为:实例.__proto__ === 构造函数.prototype
1 2 3 4 5
   | function Person() {}
  const person = new Person()
  person.__proto__ === Person.prototype 
 
  | 
 
总结:对象有一个原型(__proto__),函数有两个原型(__proto__、prototype)
而原型链就是用来找属性/方法的一种规则,当在对象自身没有属性/方法时,则会去找其原型(__proto__)对象上,若没有则再从原型(__proto__)对象上的原型(__proto__)对象找
完整版的原型链
1 2 3 4 5 6 7 8 9 10 11 12
   | function Person() {}
  const person = new Person()
 
  person.__proto__ === Person.prototype 
 
  person.__proto__.__proto__ === Object.prototype 
 
  person.__proto__.__proto__.__proto__ === null 
 
  | 
 
所有关系的原型链

如何判断实例:实例.__proto__ === 构造函数.prototype,也就是instanceof的核心判断,可以继承的哦
上述图中的关系为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | person.__proto__ === Person.prototype  Person.__proto__ === Function.prototype  Function.__proto__ === Function.prototype 
  person.__proto__.__proto__ === Object.prototype  Person.__proto__.__proto__ === Object.prototype  Function.__proto__.__proto__ === Object.prototype  Object.__proto__.__proto__ === Object.prototype 
 
  person instanceof Person  Person instanceof Function  Function instanceof Function 
  person instanceof Object  Person instanceof Object  Function instanceof Object  Object instanceof Object 
 
 
 
  |