网站首页 > 技术文章 正文
Proxy代理/代理器
Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。
代理模式
代理是一个对象(proxy)用它来控制目标对象的访问,为此先与目标对象相同的接口,但是不同于装饰者模式,它对目标对象不进行任何修改,它的目的在于延缓"复杂"对象的初始化时间,也就是说当用到这个目标对象时再初始化。
Proxy代码案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript,ES6,Proxy代理,代理模式,代码案例</title>
</head>
<body>
<script>
// ====================================================================//
// proxy,代理,操作对象时,先经过代理,才能到达对象,可以起到"拦截"的作用
// ====================================================================//
let user ={
'id': 1001,
'name': "张三",
'code': "A12345678"
}
const handler = {
get:(object,prop)=>{
return object[prop];
},
set:(object,prop,value)=>{
console.log(`代理:设置了user的${prop}属性为:${value}`);
object[prop] = value;
}
}
const userProxy = new Proxy(user,handler);
console.log("代理访问:" + userProxy.id);
userProxy.name = "李四";
console.log("代理访问:" + userProxy.name);
// ====================================================================//
//
// ====================================================================//
var _vm = {
data(){
return{
id: 1,
name: "名称",
code: 'ABCDEFG'
}
}
}
console.log("原始,id=" + _vm.data().id); // 正常的输出
console.log("原始,name=" + _vm.data().name); // 正常的输出
// 代理
var vm = new Proxy(_vm,{
get:(obj,prop)=>{
return obj.data()[prop];
},
set:(obj,prop,value)=>{
obj.data()[prop] = value;
}
})
console.log("代理,id=" + vm.id);
console.log("代理,name=" + vm.name);
</script>
</body>
</html>
猜你喜欢
- 2024-10-18 前端反向代理(前端反向代理怎么配置)
- 2024-10-18 JavaScript 九种跨域方式实现原理
- 2024-10-18 Proxy 来代理 JavaScript 里的类(js中proxy)
- 2024-10-18 octokit.js:2023每个前端都值得学习的通用SDK!
- 2024-10-18 一面 2:JS-Web-API 知识点与高频考题解析
- 2024-10-18 使用reveal.js制作精美的网页版PPT
- 2024-10-18 es6中的代理-Proxy(es proxy)
- 2024-10-18 事件——《JS高级程序设计》(javascript高级程序设计 javascript权威指南)
- 2024-10-18 「JavaScript 从入门到精通」18.WebApi介绍
- 2024-10-18 day7:前端面试题(js)(前端面试题2021及答案js)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)