通过defineProperty可以给对对象设置属性
语法:Object.defineProperty(target, name, {})
target:目标对象
name:绑定的属性值
{};属性描述
代码展示:
let obj = {
count: 0,
list: [1, 2, 3]
}
var target = {}
for (let key in obj) {
// 通过 defineProperty 为 target定义属性
Object.defineProperty(target, key, {
// value: obj[key], // 通过 value 为属性赋值
// writable:false, // 设置属性是否能够修改
enumerable: false, // 设置属性值是否允许便利
configurable: false, // 设置是否允许删除属性值
// 通过get方法可以访问到属性的值,设置get方法时,不能有value和writable,否则会报错
get: function () {
return obj[key]
},
// 通过set方法设置属性值. set方法只有在设置或修改指定属性值的时候,才会触发
set: function (val) {
console.log(val);
}
})
}
target.count = 8
console.log(target.count); // 打印结果为0 因为 writable 为false,所以无法修改属性的值,改为true,则打印结果为8
console.log(target.list);
console.log('------');
// 遍历target
for (let key in target) {
console.log(key); // 因为enumerable 设置为了false,所以无法遍历
}
// 删除target的count属性
delete target.count
console.log(target.count); // 0 因为configurable设置为false,不可删除属性