本文实例讲述了Vue实现原理。分享给大家供大家参考,具体如下:
用了
Vue也有两年时间了,一直以来都是只知其然,不知其所以然,为了能更好的使用
Vue不被
Vue所奴役,学习一下
Vue底层的基本原理。
Vue官网有一段这样的介绍:当你把一个普通的
JavaScript对象传给
Vue实例的
data选项,
Vue将遍历此对象所有的属性,并使用
Object.defineProperty把这些属性全部转为
getter/setter。
Object.defineProperty是
ES5中一个无法
shim的特性,这也就是为什么
Vue不支持 IE8 以及更低版本浏览器。通过这一段的介绍不难可以得出,Vue是通过
Object.defineProperty对实例中的
data数据做了挟持并且使用
Object.defineProperty的
getter/setter并对其进行处理之后完成了数据的与视图的同步。
这张图应该不会很陌生,熟悉
Vue的同学如果仔细阅读过
Vue文档的话应该都看到过。猜想一下
Vue使用
Object.defineProperty做为
ViewModel,对数据进行挟持之后如果
View和
Model发生变化的话,就会通知其相对应引用的地方进行更新处理,完成视图的与数据的双向绑定。下面举个例子:
html:
<div id="name"></div>javaScript:
var obj = {};
Object.defineProperty(obj,"name",{
get() {
return document.querySelector("#name").innerHTML;
},
set(val) {
document.querySelector("#name").innerHTML = val;
}
})
obj.name = "Aaron";通过上面的代码使用
Object.defineProperty










