为了账号安全,请及时绑定邮箱和手机立即绑定

Proxy() 块作用域 - Javascript

Proxy() 块作用域 - Javascript

精慕HU 2023-05-25 16:05:42
我在使用 Javascript 中的Proxy()对象时遇到问题。当我传入目标但没有处理程序时,此代码按预期工作:const scope = new Proxy({a: 2, b: 2}, {});with (scope) {    a + b;}但是,当我传入处理程序但没有目标时,它不起作用:const scope = new Proxy({}, {get: function(){ return 2; }});with (scope) {    a + b;}scope.a == 2 && scope.b == 2在这两种情况下都评估为true。
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

这是 JavaScript 在内部解析变量的方式with

JavaScript 通过搜索与包含非限定名称的脚本或函数的执行上下文关联的作用域链来查找非限定名称。“with”语句在评估其语句主体期间将给定对象添加到此作用域链的头部。如果正文中使用的非限定名称与作用域链中的属性匹配,则该名称将绑定到该属性和包含该属性的对象。否则将抛出 ReferenceError。

这只是意味着with将适用于的静态属性,scope但不适用于您创建的动态吸气剂。

这是一个简单的测试,将有助于确定属性是否可用with

const working = new Proxy({a: 2, b: 2}, {});

console.log('a' in working);


const notWorking = new Proxy({}, {get: function(){ return 2; }});

console.log('a' in notWorking);


此外,with已弃用,这是从对象中提取属性的现代方法(称为解构赋值,它也适用于动态获取器):



const scope = new Proxy({}, {get: function(){ return 2; }});

const {a, b} = scope;

console.log(a + b);


查看完整回答
反对 回复 2023-05-25
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号