ES6中Proxy代理用法实例浅析
发布时间 - 2026-01-11 00:32:24 点击率:次本文实例讲述了ES6中Proxy代理用法。分享给大家供大家参考,具体如下:

ES6中提出了一个新的特性,就是proxy,用来拦截在一个对象上的指定操作。这个功能非常的有用。举一个例子来说:
var engineer = { name: 'Joe Sixpack', salary: 50 };
var interceptor = {
set: function (receiver, property, value) {
console.log(property, 'is changed to', value);
receiver[property] = value;
}
};
engineer = Proxy(engineer, interceptor);
engineer对象被代理Proxy构建的代理对象代替,传入Proxy的第二个参数是一个处理器函数,一个处理器函数有多种方法,如get、set等方法。这里的set方法能够拦截到那些在代理对象身上进行的所有的属性赋值操作。
当我们执行下面赋值:
engineer.salary = 60;
会触发处理器,输出信息:
salary is changed to 60
每当代理对象被赋值,处理器函数就会调用,这样就可以用来调试某些问题。
当然了,Proxy可不是仅仅为了调试而诞生的,如果你用过Sencha Touch 或者 AngularJS的话,就会发现这些框架都是类似数据模型绑定的功能。
笔者曾在Sencha Touch中用过代理,代码如下:
proxy:{//数据代理
// type:'localstorage',
// id:'bills',
// limitParam:'limit',
// pageParam:'page',
//将用户代理改为sql,通过websql来解决localstorage的5MB存储上限的问题
type:'sql',
database:'myDB',
table:'bill',
},
//filters:[{property:"kind",value:"无"}],//过滤属性
listeners:{
removerecords:function(){
console.log("数据被删除");
},
addrecords:function(){
console.log("数据被追加");
},
updaterecord:function(){
console.log("数据被修改");
},
}
可以看到,它采用的是一种监听setter和getter的办法,而在Angular中采用的则是脏检测。。当我们有了Proxy后,对于简单的数据模型绑定就可以简化这些特定的检测方式了。
我们还可以使用proxy来实现多继承。众所周知,JavaScript中每个对象只能有一个直接的上层原型,从而无法实现多继承:
var foo = {
foo: function () {
console.log("foo")
}
};
var bar = {
bar: function () {
console.log("bar")
}
};
var sonOfFoo = Object.create(foo);
sonOfFoo.foo(); //"foo"
var sonOfBar = Object.create(bar);
sonOfBar.bar(); //"bar"
//怎么才能既有foo方法又有bar方法?
我们可以通过proxy中的get处理器来生成一个继承两个原型的代理对象:
sonOfFooBar = new Proxy({}, {
get: function (target, name) {
return target[name] || foo[name] || bar[name];
}
})
sonOfFooBar.foo(); //"foo",有foo方法,继承自对象foo
sonOfFooBar.bar(); //"bar",也有bar方法,继承自对象bar
其还有很多应用场景,可以参考下面这篇文章:proxy
但是百度EFE团队给出的评价是该功能不能通过模拟实现,所以建议不要使用。所以还是值得观望一段时间的。
希望本文所述对大家ECMAScript程序设计有所帮助。
# ES6
# Proxy
# 代理
# 实例解析ES6 Proxy使用场景介绍
# 详解ES6中的代理模式——Proxy
# JavaScript中的ES6 Proxy的具体使用
# 详细探究ES6之Proxy代理
# ES6知识点整理之Proxy的应用实例详解
# ES6之Proxy的使用详解
# ES6中Proxy常用的拦截操作全面讲解
# 就会
# 用过
# 当我们
# 绑定
# 就可以
# 的是
# 都是
# 是一个
# 如果你
# 也有
# 还可以
# 则是
# 又有
# 而在
# 提出了
# 我们可以
# 有多
# 第二个
# 给大家
# 可以看到
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
原生JS获取元素集合的子元素宽度实例
打造顶配客厅影院,这份100寸电视推荐名单请查收
如何在宝塔面板中修改默认建站目录?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
香港服务器租用费用高吗?如何避免常见误区?
如何在Windows环境下新建FTP站点并设置权限?
Laravel如何使用withoutEvents方法临时禁用模型事件
如何快速搭建FTP站点实现文件共享?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
进行网站优化必须要坚持的四大原则
Laravel API资源类怎么用_Laravel API Resource数据转换
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何挑选优质建站一级代理提升网站排名?
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
手机软键盘弹出时影响布局的解决方法
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
如何获取免费开源的自助建站系统源码?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
浅述节点的创建及常见功能的实现
Laravel如何发送系统通知?(Notification渠道示例)
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
如何在万网ECS上快速搭建专属网站?
无锡营销型网站制作公司,无锡网选车牌流程?
EditPlus中的正则表达式实战(6)
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Python文件异常处理策略_健壮性说明【指导】
韩国服务器如何优化跨境访问实现高效连接?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
音响网站制作视频教程,隆霸音响官方网站?
如何快速完成中国万网建站详细流程?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
利用JavaScript实现拖拽改变元素大小
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何在香港服务器上快速搭建免备案网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
5种Android数据存储方式汇总
jQuery validate插件功能与用法详解
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何为不同团队 ID 动态生成多个非值班状态按钮

