全网vue data数据劫持代理

221 阅读1分钟

vue中的data数据为什么可以直接this就能拿到data里面的数据,底层思路就是用的Object.defineProperty方法进行的劫持代理方法的。 下面是代码实现的过程

js

// 模拟data数据
let data = {
	name: 'chen',
    age: 18
}

// 模拟组件的实例
let _this = {}

// 利用object.defineProperty()
for(let item in dta) {
	Object.definProperty(_this,item, {
    	// get: 用来获取扩展属性值,当获取该属性值的时候调用get方法
    	get(){
        	return data[item]
        },
        // set: 监视扩展属性的,只要已修改就调用
        set(newValue) {
        	data[item] = newValue
        }
    })
}

_this.name = 'wade'
console.log(_this.name)