ES6规范定义了一个全新的全局构造函数:代理(Proxy)
Proxy用于修改某些操作的默认行为,也可以理解为在目标对象之前架设一层拦截,外部所有的访问都必须先通过这层拦截,因此提供了一种机制,可以对外部的访问进行过滤和修改。这个词的原理为代理,在这里可以表示由它来“代理”某些操作,译为“代理器”。
- ES6原生提供了Proxy构造函数,用来生成Proxy实例。
var proxy = new Proxy(target, handler);
- Proxy对象的所有用法,都是上面的这种形式。不同的只是handle参数的写法。其中:
new Proxy 用来生成Proxy实例,
target 是表示所要拦截的对象,
handle 是用来定制拦截行为的对象。
let person = {
name: '豆豆豆豆豆',
gender: '女',
age: 18
}
//暴漏给用户操作的一个对象,把上边的person保护起来,以后操作的就是这个person
let person = new Proxy(person, { //通过Proxy代理上边的person(原始数据)
get(target, key) { //target指的是代理的数据也就是person, key也就是你要它的哪个属性
return target[key]
},
set(target, key, value) {
if(key !== 'gender'){ //数据保护 gender 不许修改
target[key] = value
}
}
})
console.log(person.gender)
//打印结果: 女
try{
person.gender = '男'
} catch (e) {
console.error(e)
} finally {
}
//打印结果:报错gender不许修改
Proxy支持拦截的操作一共有13种,具体了解可看手册
这里在普及一下 Try...Catch 语句, 和 finally 子句
try...catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。
try {
//在此运行代码
} catch(err) {
//在此处理错误
} finally {
//只要代码中包含finally子句,无论try或catch语句块中包含什么样的代码,都不会阻止finally子句的执行
}
网友评论