是否可以访问只能在“with”语句中使用方括号表示法访问的对象属性。
示例:
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"?
}
答案 0 :(得分:2)
哇这已经过时了,但这里的答案是错误的,事实上有办法完全按照你的要求去做。
with({'!@#$%': 'omg', d: 'hai'}) {
console.log(d); //hai - naturally
console.log(valueOf()['!@#$%']); //omg - OMG
}
你看到了吗? valueOf()是神奇的词。它返回其父对象的原始值,或者如果对象没有原始值,则返回对象本身。每个对象和类似对象的原语都继承此方法,因为它是Object.prototype
上的内置属性。所以......你去吧。
答案 1 :(得分:1)
通常,with关键字用于解析长命名空间,而不是单个对象引用。我想我需要知道在这里使用关键字的意图是什么。我不相信语法分析器会让你逃脱o.bad:property
,这基本上是用来编码的。
如果示例中的o
对象只是更长命名空间的快捷方式,我建议使用with来阻止一个对象在分辨率中缩短,然后将属性框放入这样的字符串中。
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"!
}
希望有所帮助。
答案 2 :(得分:0)
据我所知,(o)基本上跳到o的范围,因此可以通过名称访问属性:“bad”和“goodProperty”。
with(o) {
bad="new value";
goodProperty=22;
}