Open itstrive opened 5 years ago
set
的小例子:let user = {
firstName: 'Strive',
lastName: 'Chen'
};
user.age = 25;
console.group('User');
console.log(user.firstName);
console.log(user.lastName);
console.log(user.age);
console.groupEnd();
user.age = '随便一些东西'
console.log(user.age);
user.age = -100
console.log(user.age);
// 这里的功能有点类似验证,所以取名 validator
const validator = {
set: function(obj, prop, value) {
if (prop === 'age') {
if(!Number.isInteger(value)) {
throw new TypeError('年龄必须为整数,请正确设置');
}
if(value < 0) {
throw new TypeError('别闹,年龄必须大于0');
}
}
}
};
// 创建一个Proxy
let p = new Proxy(user, validator);
p.age = '随便试试';
// 上面注释了,在看看
p.age = -1
deleteProperty
小例子大多数情况,有些对象身上的属性,我们不希望删除的
let department = {
id: '001',
name: 'Strive',
sex: 'women'
}
console.group('Department');
console.log(department.id);
console.log(department.name);
console.log(department.manager);
console.groupEnd();
// delete department.id;
// console.log(department);
const deleteProxy = {
deleteProperty: function(target, fieldName) {
if(fieldName === 'id') return false;
delete target[fieldName];
return true;
}
}
let p = new Proxy(department, deleteProxy);
delete p.id;
console.log(department);
参考资料: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy ES6视频资料: https://ke.qq.com/course/274758?taid=1770527253606726
认识一下 ES6中的 Proxy
这里简单介绍下,record一下,因为此API功能及其强大,后面慢慢记录.
fullName
属性,以及如果没有属性了,提示信息换一下以上的handler,做了两件事,添加了一个
fullName
属性,并且加了一个友好的提示语小结: 大家有没有发现,其实
Proxy
就是用来,增强(装饰或者叫赋能)一个对象的刚刚我们使用了 handler里面的
get
,除此之外还有:更详细的,大家可以看: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
set
作用Proxy
这个功能其实非常有想象力,后续浏览器也会重点优化更新此API,其他能想到的案例应用:deleteProperty
)get
,set
)set
), Vue3.0重构使用就是它