Vue实例可以直接访问哪些属性?有_与 $开头的,和data当中的数据。以及原型对象的数据 vm.$delete,$ 给程序员访问,_是vue框架底层访问
data当中的数据用数据代理机制可以直接访问。
数据代理机制是用Object的defineproperty方法。
Object的defineproperty方法语法如下:Object.defineproperty(哪个对象,属性名,{属性增加相应的key——value对}),能给对象增加属性,改变原有属性,该方法时ES5新增。该方法道德属性名加上“”,肯定是字符型的。newVue()时,构造函数的this就是vm实例对象。Object.key(data对象)得到一个数组,数组的值是data对象的属性名。在JS内数组.foreach(函数)必须为一个函数,可以是匿名函数。会循环这个函数,这个函数内第一个参数一定是属性名,第二个一定是下标,第三个是数组对象。可以用箭头函数。 配置项有 value 该属性的值 writable 该属性的值是否可以改变,true可改。 get,当读取该属性时自动调用该函数 set,当修改该属性时自动调用该函数,前两个属性与后两个属性不可共存,配置项的value可以是函数和对象等。调用set方法时,会给第一个参数赋的值。 vm.$ data这样对data访问,不是vm.msg这样,vm.$ data和vm._data属性的msg也是做了数据处理。
数据代理机制,将data的数据直接让vm实例访问。data当中的数据以_和$的数据不会做数据代理,因为会可能覆盖原本的属性,所以对以这两种开头的数据没做数据代理。
console.log("haha")无法在控制台显示时
自己写vue框架的数据代理机制实现数据代理
忍不住放两张