let data = {
prop1: "属性1",
prop2: {
name: '属性2'
}
}
function observe(obj) {
if (!obj || Object.prototype.toString.call(obj) !== '[object Object]') return
Object.keys(obj).forEach((key) => {
this.defineProperty(obj, key, obj[key])
})
}
// 不能用obj[key]的原因是:获取了值就会无限触发 get
function defineProperty(obj, key, val) {
Object.defineProperty(obj, key, {
get() {
console.log('set', val);
return val
},
set(newVal) {
if (newVal === val) {
return
}
console.log('get', newVal);
val = newVal
}
})
}
observe(data)
console.log(data.prop2);
data.prop1 = 'prop1'
data.prop2 = { name: 'prop2' }
data.prop2
Object.defineProperty
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...