我在使用 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);
添加回答
举报
0/150
提交
取消