vue源码分析之数据劫持
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body><script>
// 判断是不是对象类型
function isObj(x){
if(Object.prototype.toString.call(x) == '[object Object]'){
return true
}
}
function Vue(options){
this._data = options.data
observe(options.data)
}
function observe(data){
for(key in data){
let val = data[key]
Object.defineProperty(data,key,{
get(){
return val
},
set(newVal){
if(newVal === val){
return
}
val = newVal
if(isObj(newVal)){
observe(newVal)
}
}
})
if(isObj(data[key])){
observe(data[key])
}
}
}
let vue = new Vue({
el:"#app",
data:{A:{a:1},B:2}
})
</script>
</html>