游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

JavaScript之Proxy

  前言
  Proxy可以理解成,在目标对象之前架设一层拦截,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy这个词的原意是代理,用在这里表示由它来代理某些操作,可以译为代理器。语法varproxynewProxy(target,handler);
  Proxy对象的所有用法,都是上面这种形式,不同的只是handler参数的写法。其中:newProxy()表示生成一个Proxy实例target参数表示所要拦截的目标对象handler参数也是一个对象,用来定制拦截行为
  如果handler没有设置任何拦截,那就等同于直接通向原对象。lettarget{};lethandler{};letproxynewProxy(target,handler);proxy。name编程三昧;console。log(target。name);编程三昧
  还有一个技巧是将Proxy对象,设置到object。proxy属性,从而在object对象上调用:letproxynewProxy({},{get:function(target,property){return35;}});letobjObject。create(proxy);obj。time35get()
  get()方法用于拦截某个属性的读取操作,可以接受三个参数,依次为:目标对象属性名proxy实例本身(严格地说,是操作行为所针对的对象),可选。
  get()方法的用法,上文已经有一个例子,下面是另一个拦截读取操作的例子:letperosn{name:james,age:26,profession:software}varproxynewProxy(perosn,{get:function(target,property){if(propertyintarget){returntarget〔property〕;}else{thrownewReferenceError(propertypepropertydoesnoexit);}}});console。log(proxy。name,proxy。profession);jamessoftwareconsole。log(proxy。sex);UncaughtReferenceError:propertypesexdoesnoexitset()
  set()方法用来拦截某个属性的赋值操作,可以接受四个参数,依次为:目标对象属性名属性值Proxy实例本身,可选。
  假定person对象有一个age属性,该属性应该是一个不大于200的整数,那么可以使用Proxy保证age的属性值符合要求。letperosn{name:james,age:26,profession:software}letproxynewProxy(perosn,{get:function(target,property){if(propertyintarget){returntarget〔property〕;}else{thrownewReferenceError(propertypepropertydoesnoexit);}},set:function(target,key,value){if(keyage){if(value80){throwReferenceError(invail);}else{returntarget〔key〕value;}}else{returntarget〔key〕;}}});proxy。age60;console。log(proxy。name,proxy。profession,proxy。age);jamessoftware60proxy。age99;UncaughtReferenceError:invailapply()
  apply()方法拦截:函数的调用call操作apply操作
  apply()方法可以接受三个参数,分别是:目标对象目标对象的上下文对象(this)目标对象的参数数组。lettwice{apply(target,ctx,agrs){returnReflect。apply(。。。arguments)2;}};functionsum(a,b){returnab;}letproxy5newProxy(sum,twice);console。log(proxy5(1,3));8console。log(proxy5。apply(null,〔1,3〕));8
  另外,直接调用Reflect。apply方法,也会被拦截。Reflect。apply(proxy5,null,〔9,10〕)38has()
  has()方法用来拦截HasProperty操作,即判断对象是否具有某个属性时,这个方法会生效。典型的操作就是in运算符。
  has()方法可以接受两个参数,分别是目标对象、需查询的属性名。
  下面的例子使用has方法隐藏某些属性,不被in运算符发现。letstu1{name:张三,score:59};letstu2{name:李四,score:99};lethandler{has(target,prop){if(propscoretarget〔prop〕60){console。log({target。name}不及格);returnfalse;}returnpropintarget;}}letoproxy1newProxy(stu1,handler);letoproxy2newProxy(stu2,handler);scoreinoproxy1张三不及格falsescoreinoproxy2truefor(letainoproxy1){console。log(oproxy1〔a〕);}张三59for(letbinoproxy2){console。log(oproxy2〔b〕);}李四99
  上面代码中,has拦截只对in运算符生效,对for。。。in循环不生效,导致不符合要求的属性没有被for。。。in循环所排除。Proxy支持的拦截操作一览
  Proxy支持的拦截操作基本有13种。get(target,propKey,receiver)
  拦截对象属性的读取,比如:proxy。fooproxy〔foo〕。set(target,propKey,value,receiver)
  拦截对象属性的设置,比如proxy。foov或proxy〔foo〕v,返回一个布尔值。has(target,propKey)
  拦截propKeyinproxy的操作,返回一个布尔值。deleteProperty(target,propKey)
  拦截deleteproxy〔propKey〕的操作,返回一个布尔值。ownKeys(target)
  拦截:Object。getOwnPropertyNames(proxy)Object。getOwnPropertySymbols(proxy)Object。keys(proxy)for。。。in循环
  以上拦截都返回一个数组。
  该方法返回目标对象所有自身的属性的属性名,而Object。keys()的返回结果仅包括目标对象自身的可遍历属性。getOwnPropertyDescriptor(target,propKey)
  拦截Object。getOwnPropertyDescriptor(proxy,propKey),返回属性的描述对象。defineProperty(target,propKey,propDesc)
  拦截:Object。defineProperty(proxy,propKey,propDesc)Object。defineProperties(proxy,propDescs)
  返回一个布尔值。preventExtensions(target)
  拦截Object。preventExtensions(proxy),返回一个布尔值。getPrototypeOf(target)
  拦截Object。getPrototypeOf(proxy),返回一个对象。isExtensible(target)
  拦截Object。isExtensible(proxy),返回一个布尔值。
  setPrototypeOf(target,proto)
  拦截Object。setPrototypeOf(proxy,proto),返回一个布尔值。
  如果目标对象是函数,那么还有两种额外操作可以拦截。
  apply(target,object,args)
  拦截Proxy实例作为函数调用的操作,比如:proxy(。。。args)proxy。call(object,。。。args)proxy。apply(。。。)。construct(target,args)
  拦截Proxy实例作为构造函数调用的操作,比如:newproxy(。。。args)。
  本文完,感谢阅读!
  学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!
  大家好,我是编程三昧的作者隐逸王,我的公众号是编程三昧,欢迎关注,希望大家多多指教!

徕卡代表性摄影师马克吕布与中国印象1957年,故宫照片照亮了我们对昔日往事的留念,那些白驹过隙般的美好时光因为照片而重拾。马克吕布(MarcRiboud),20世纪伟大的摄影师之一,1952年……在售进口豪华大型SUV只剩3款,它的表现算是出众的了百万级豪华大型SUV市场一直不算是大的细分市场,但就是这样一个小市场,曾经充斥着来自不同品牌的多款车型,包括奔驰GLS、宝马X7、雷克萨斯LX、凯迪拉克凯雷德、英菲尼迪QX80……互联网高墙已拆,这些应用的外链分享,真的不再受限了吗?一个月前,工信部信息通信管理局局长赵志国在发布会上表示,今年7月启动的互联网行业专项整治行动中,屏蔽网址链接是重点整治的问题之一,互联网企业需要在9月17日之前解除对网址链接的……价格仅为AirPodsPro的13,这款雷蛇耳机带给安卓用户雷蛇年初出过一款战锤狂鲨降噪版耳机,当时多位朋友向我极力推荐,因为不是刚需所以一直忍住没有剁手。前阵子换了17T手机,这是一款没有3。5mm接口的手机,只好四处物色蓝牙耳机。恰……新型森林消防泵鉴定会圆满成功2021年10月10日,江苏省工业和信息化厅在泰州市组织召开了江苏福马高新动力机械有限公司、江苏林海动力机械集团有限公司、林海股份有限公司共同研制的SFBD123。5森林消防泵……互联网家谱到底是不是新鲜事儿?修谱作为一种民族文化的传承,在五千年历史的文化长河中,一直有着不可替代的作用。历史是永远有记载的,家族家谱也是记载传宗传代及辈份。一个家族如果失去了谱,那就失去祖次辈份的尊称了……2020设计趋势UIUX一、暗模式(Darkmode;androidQandiOS13)暗模式是2020年延续2019的新趋势,Android系统引入了两种类型的暗模式,分别为强制暗模式和系统暗……名门修谱发现家谱有错误,能够正确处理的人,几乎没有传统修谱以前家谱讲究30年一小修、60年一大修,而每一次新修家谱,出现一些错误也是见怪不怪的事情。在很多大姓家族的家谱中,部分姓氏出现傍名人的情况。随着时代的发展,在互联……库克宣布苹果将捐款帮助山西怎么回事?苹果将捐款帮助山西捐多少最近一段时间,山西遭遇暴雨袭击,多地受损严重,名胜古迹告急,受损的古建达1763处。苹果CEO库克刚刚在微博发表公告,宣布苹果将捐款帮助重建。库克用中英文表示,随着山西地……明知道虚拟币风险高,为什么还有那么多人投资虚拟币呢?说白了总认为自己不是那个被割韭菜的人其实很正常,每个人都有赌性,赌都认为,自己不可能是最后一个,但是也不可能是第一个。一、顺势而为玩过股票的都知道基本面,也就……Cisco基础配置命令注释R1(config)bannermotd提示信息,(分界符)设置console密码R1(config)lineconsole0进入console0R1(con……荣耀CEO赵明再放狠话!自研ISP芯片难度并不大小米蓝厂无奈【9月29日讯】相信大家都知道,随着中兴、华为等国产科技巨头被列入到实体清单以后,无疑也是给国内手机厂商们彻底敲醒了警钟,让小米、OPPO、vivo等知名国产手机巨头纷纷开启了……
这颗美轮美奂的钻石,极有可能拍出3800万美元这颗15。81克拉的钻石在香港拍卖时可能会拍出3800万美元的价格。这颗宝石取名樱花,是一颗紫粉色钻石,它的品质被归为内部无瑕疵,这意味着任何瑕疵只有在近距离放大后才能看……小米有品新猛将易锁宝智能蓝牙U型锁,可以用手机一键控制科技让生活更美好,这话说的真好。在移动互联网时代越来越多的智能产品走进了我们的家庭里,智能家居已经是一种趋势,像常见的智能手机、智能音箱、智能灯泡、智能门锁等等,深受当代年轻人……今年过节还是在家玩游戏最安全,有荣耀猎人游戏路由帮你加速随着移动互联网发展,手游已经成为主流越来越受到年轻人的厚爱,但是在游戏过程中,最怕两种情况发生,要么遇到小学生队友,要么在关键时刻发生网络卡顿造成游戏延迟,错失最后的胜利。关于……为何手机厂商都不再宣传屏占比了不知道各位数码爱好者是否注意到一个现象,就是在最近的手机发布会上几乎没有提到一个过去重点对比的项目,屏占比了。比拼屏占比的年代末应该是18年,那个时候受到苹果大刘海设计的启发,……性能耗电比增加三倍IBM全球抢先发布2nm芯片制程技术IBM作为曾经的半导体制造先锋在沉寂了好多年后终于又发飙了,今日该公司宣布了全球首个2nm制程技术,该技术和现在的7nm技术相比可以实现45的性能提升或者75的能耗降低。……你不知道的事工业触控一体机的5G应用早已能实现!今日春分,中国传统二十四节气之一,春季的第四个节气。此时节,莺飞燕舞风和煦,春来处处百花香,万物生长满地绿意藏不住。前言回首20……海康威视扫码手持终端H1系列自研科技助力仓储智能化管理随着科技的发展,传统的仓配销行业却还停留在手工记账盘点、手动记录备货量等方式来实现仓储管理和生产管理,容易存在漏盘错盘等问题,并且效率低、工作量大。为解决这些痛点,提高生产、管……刘作虎罗永浩互动锤子要给一加适配系统?近期,一加CEO刘作虎和原锤子科技CEO罗永浩在微博上聊嗨了。罗永浩在微博上表示,正在努力撮合锤子科技和一加进行合作,或许会帮助一加手机适配双系统,除了氢OS,还可以采用Sma……为什么你的街拍,没人点赞如何快速提高街拍技巧?韩松原画册创始人2015年IPPA人物类金奖得主2015Arcaidimages最佳建筑摄影奖得主其作品曾参展大理国际影展、……最高600瓦,PCIECEM5。x标准采用全新124pin供NVIDIA在公版RTX30系列发布的时候,引入了一个十二针的供电接口,相对于以往的PCIE供电接头来说,该接口具有体积小、供电能力强的特点。左:传统PCIE8针供电接口……有些时候,感光度不是越低越好对于感光度之前给大家强调的都是越低越好,感光度越低画质越有保证:通过上图,可以明显对比出来感光度越高照片画质越低,所以我们在拍摄时都会尽量用低感光度拍摄。感光度越低……蚌埠住了!一份硬核的阿里P8高并发实战笔记,吊打面试官不在话有小伙伴爆料,前段时间收到了阿里的面邀,结果一不小心把面试官给吊打了。。。这次面试一共五轮,在第四轮交叉面的时候,问了他即将到来的双十一大促,千亿流量高并发秒杀系统设计,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网