“具有”范围和带有方括号符号的属性
-
24-10-2019 - |
题
是否可以访问只有在“ a”语句中内部时,只能用方括号符号访问的对象属性。
例子:
var o = { "bad-property": 1, "another:bad:property": 2, "goodProperty": 3 };
with(o) {
console.log(goodProperty); // works awesome
console.log(???) // how to access "bad:property"?
}
解决方案
哇,这是旧的,但是这里的答案是错误的,实际上,确实可以按照您的要求做。
with({'!@#$%': 'omg', d: 'hai'}) {
console.log(d); //hai - naturally
console.log(valueOf()['!@#$%']); //omg - OMG
}
你看见了吗? 的价值() 是神奇的词。它返回其父对象的原始值,或者如果对象没有原始值,则该对象本身。每个对象和类似对象的原始性都继承了此方法,因为它是一个内置的属性 Object.prototype
. 。所以...你去。
其他提示
通常,使用关键字用于解析长名称空间,而不是单个对象引用。我想我需要知道在这里使用关键字的意图是什么。我不相信语法解析器会让你摆脱 o.bad:property
, ,这基本上是使用的内容。
如果是 o
该示例中的对象只是更长的名称空间的快捷方式,我的建议是在使用with的分辨率中停止一个对象,然后将box放入这样的字符串中...
var nmSpace = new Object();
nmSpace.o = { "bad:property": 1, "goodProperty": 2 };
with (nmSpace) {
alert(o['goodProperty']); // works awesome
alert(o['bad:property']); // now accesses "bad:property"!
}
希望有帮助。
正如我所理解的那样,(O)本质上跳到O的范围,因此可以通过其名称访问属性:“ Bad”和“ GoodProperty”。
with(o) {
bad="new value";
goodProperty=22;
}
不隶属于 StackOverflow