要点:
因为vm上面有许多的方法和属性,这样就可以做到,vm能用的vc也能用
就是这个代码
Vuecomponent的原型对象的隐式原型属性就是vue的原型对象
注:
我们这边说的vc就是VueComponent的简写,就是一个组件的实例对象,就是一个小型的vm,但是它没有vm的el属性,并且,配置data属性时,只能用函数形式配置
当定义一个构造函数的时候
一般程序员通过红色这条线,进行对原型对象的更改
而程序则通过黄色线进行寻找
观察输出 看是否两条路线找到的原型对象一样
把_proto_省略也可以,因为如果在上面找不到x就用隐式原型链进行查找主动找到_proto_里面的x
表示蓝色框的对象是d 是由红色框的demo构造出来的
demo写的必要性
如果不写就不知道谁是谁缔造的了
这边不能这样写 VueComponent 因为组件是由new VueComponent()生成的,这边这个组件的名字叫school不是VueComponent
顺着隐式原型链找到了里面由$mount $watch
我们这边的vm相当于这边的一个d一个实例对象,所以vm有隐式原型属性_proto_,但是没有显示原型属性prototype
实例对象中的隐式属性永远指向缔造者的原型对象
验证图的流程
打开vm
1.vue的原型对象红色框的
2.
再往下找就找到了尽头,出现了tostring,也就是object的原型对象
这边组件路线由于组件是由new VueComponent()创建的,所以VueComponent是个方法函数有显示属性prototype,并指向VueComponent的原型对象,
当遍写了组件标签,产生了一个VueComponent实例对象(即进行了new VueComponent()),而对象中有_proto_并指向也VueComponent的原型对象,但是一般来说之后会直接指向object的原型对象,但是vue把它路线强制修改了,让之后连接到了vue的原型对象,最后再到object的原型对象
比如再vm上定义一个x,当你在组件上进行寻找,就会找到x因为会找到vue的原型对象,其中就会有x
就是这个代码
Vuecomponent的原型对象的隐式原型属性就是vue的原型对象
验证:
发现在组件上,能读到vm的x