
function defineReactive(target, key, value) {
observer(value)
Object.defineProperty(target,key, {
get() {
return value
},
set(newValue) {
if(newValue !== value) {
value = newValue
updateView()
}
}
})
}
const oldArrayProperty = Array.prototype
const arrProto = Object.create(oldArrayProperty)
const larr = ['push','pop', 'unshift','shift', 'reverse','splice']
larr.forEach(method => {
(arrProto[method]) = function () {
updateView()
return oldArrayProperty[method].call(this,...arguments)
}
})
function observer(target) {
if(typeof target !== 'object' || target === null) {
return target
}
if(Array.isArray(target)) {
// 处理数组
target.__proto__ = arrProto
for (let i = 0; i< target.length; i++) {
observer(target[i])
}
}else {
for (let key in target) {
defineReactive(target, key, target[key])
}
}
}
function updateView() {
console.log('视图更新了')
}
const data = {
name: '小马哥',
age: 20,
info: {
address: '北京'
},
favs: [1,2,3,4]
}
observer(data)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)