在平时使用vue来开发项目的时候,对于下面这一段代码,我们可能每天都会见到:
但是自己实现一个构造函数却实现不了这种效果呢?
那么vue2中是怎么实现这种调用方式的呢?
其实主要是initState这个函数,这个函数初始化了props, methods, watch, computed
其实整个initMethods方法核心就是将this绑定到了实例身上,因为methods里面都是函数,所以只需要遍历将所有的函数在调用的时候将this指向实例就可以实现通过this直接调用的效果。
其他的大部分代码都是用于一些边界条件的判断:
其实对data的处理就是将data中的属性的key遍历绑定至实例vm上,然后使用Object.defineProperty进行拦截,将真实的数据操作都转发到this.data上。
Object.defineProperty对象属性
value:属性的默认值。
writable:该属性是否可写。
enumerable:该属性是否可被枚举。
configurable:该属性是否可被删除。
set():该属性的更新操作所调用的函数。
get():获取属性值时所调用的函数。简略实现效果
作者:pino
链接:https://juejin.cn/post/7112255428452417549
来源:稀土掘金
| 留言与评论(共有 0 条评论) “” |