let obj = {};
// 给对象定义一个属性
Object.defineProperty(obj, “name”, {
get() {
console.log(“我获取的”);
},
set() {
console.log(“我设置的”);
}
})
// 我设置的
obj.name = 123;
// 我获取的
obj.name
// v-model用的核心的方法
// v - model: Object.defineProperty()
// 封装Object.defineProperty()方法
//vue双向绑定原理 拦截原理
function createProperty(obj) {
let keys = Object.keys(obj);
keys.forEach((item, index) => {
objFn(obj, item, obj[item])
})
return obj;
}
function objFn(obj, item, val) {
Object.defineProperty(obj, item, {
get() {
console.log(`${item}获取`)
},
set(newVal) {
console.log(`${item}设置`)
val = newVal
}
})
}
let car = createProperty({
a: 1,
b: 2
})
//a设置的
car.a = 11111;
//b设置的
car.b = 11111;
// b获取的
car.b