利用Object.defineProperty定义的属性只能用里面的set方法进行修改,不能直接用<对象.属性='xx'>的方法进行修改
let obj = {
name:'zhangsan',
age:15
}
let temp = {
job:'student'
};
for(let item in obj) {
Object.defineProperty(temp,item,{
get() {
return obj[item];
}
})
}
temp.name = 'lisi';
temp.job = 'teacher';
console.log(temp.name); // zhangsan
console.log(temp.job); // teacher
正确的修改方法为:
for(let item in obj) {
Object.defineProperty(temp,item,{
get() {
return obj[item];
},
set(newValue) {
obj[item] = newValue;//正确
temp[item] = newValue;//错误,会一直重复set操作进入死循环
}
})
}