提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
一、Proxy代理是什么?
示例:Proxy对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如:属性查找,枚举,赋值,函数调用等)
。
二、使用步骤
1.Proxy查找
代码如下(示例):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
var obj = {
'name': '木木',
age: 18
};
var o = new Proxy(obj, {
get: function(target, prop) {
if (prop in target) {
return target[prop]
} else {
return '我查查';
}
},
set: function(target, prop, value) {
if (porp === 'age') {
if (value > 200 || va < 0) {
throw RangeError('这个年龄恐怕不是人类')
} else {
target[prop] = value;
}
} else {
target[prop] = value;
}
}
})
</script>
</body>
</html>
2.Proxy代理劫持
代码如下(示例):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<input type="text" id="inp">
<p id="myp"></p>
</body>
<script type="text/javascript">
// 获取两个节点
var inp = document.getElementById('inp');
var myp = document.getElementById('myp');
// 定义对象obj
var obj = {
msg: '我喜欢Vue'
};
// 使用代理劫持obj
var o = new Proxy(obj, {
// get 劫持
get(target, prop) {
return target[prop]
},
// set 劫持
set(target, prop, value) {
// 只要被设置 value会输出
// console.log(value);
if (prop === 'msg') {
// 更新
myp.innerText = value;
inp.value = value;
}
target[prop] = value;
}
})
// 设置节点的值或者文本
inp.value = o.msg;
myp.innerText = o.msg;
// 目标:当input发生变化时候,p的内容也会跟随变化
// 给inp表单添加input事件修改o.msg的值
inp.oninput = function() {
o.msg = inp.value
}
</script>
</html>
总结
Proxy对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如:属性查找,枚举,赋值,函数调用等)。
Proxy(target,handler),这里的handler可以使set get has hasOwn keys等等方法。
。