vue中的原型链

427 阅读2分钟

终极原型链

终极原型链.jpg

类的继承的关系

//父类
 class Person {
        do() {
          console.log("do");
        }
      }
//定义一个子类继承父类
      class Student extends Person {
        eat() {
          console.log("eat");
        }
      }
      //实例化Student实例
      const s1 = new Student();

分析含有继承的原型链的关系

当要找一个自己对象原型上没有的属性或者方法的时候,会沿着原型链一级一级的往上走 s1===>s1.__proto__==>s1.__proto__.__proto__==>s1.__proto__.__proto__.__proto__==>null

查找过程:1.在自己的实例上(s1)找,2.沿着自己的隐式原型对象去构造函数Person的原型对象上找(s1.__proto__==Student.prototype) 3.在前面的基础上再往上找(查找继承的类的原型)(s1.__proto__.__proto__===Person.prototype) 4.如果还是没有找到,还会往上找 (s1.__proto__.__proto__.__proto__===Object.prototype) 5.最后如果Object.prototype上不存在的话,整个方法或者属性就不存在,因为Object.prototype.__proto__===null

分析不含继承的原型链的关系

s1 ===> Student.prototype ===> Person.prototype ===> Object.prototype ===->null 区别在于当查找自己的构造函数的原型对象时候,如果没有找到(由于原型对象是一个对象,是Object New出来的),那么会直接去查找Object的原型对象去找。

vue的原型链

uTools_1686127989441.png

组件创建过程

Vue组件会Vue.extend一个子组件,每一个子组件的实质其实是一个小型vm的实例,每一个组件实例都有自己的VueComponent构造函数,在使用的过程中,VueComponent构造函数会创建实例,该组件上的this会指向组件实例,

组件的原型链

this(指向组件当前的实例),
this.__proto__(指向VueComponent构造函数的原型对象)
this.__proto__.__proto__(指向的是Vue组件的原型对象)
this.__proto__.__proto__.__proto__(指向的是Object)

VueComponent是Vue框架内部使用的一个类,表示一个 Vue 组件的构造函数,只有通过Vue.extend方法或使用单文件组件(SFC)定义的组件才会存在该构造函数。

无标11题.png