是否可以在“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"?
}
是否可以在“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"?
}
哇,这很旧,但这里的答案是错误的,实际上有办法完全按照你的要求去做。
with({'!@#$%': 'omg', d: 'hai'}) {
console.log(d); //hai - naturally
console.log(valueOf()['!@#$%']); //omg - OMG
}
你看见了吗?valueOf()是一个神奇的词。它返回其父对象的原始值,或者如果对象没有原始值,则返回对象本身。每个对象和类对象原语都继承此方法,因为它是Object.prototype
. 所以……给你。
通常 with 关键字用于解析长命名空间,而不是单个对象引用。我想我需要知道在这里使用关键字的意图是什么。我不相信语法解析器会让你侥幸逃脱o.bad:property
,这基本上就是使用 with 编码的内容。
如果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"!
}
希望有帮助。
据我了解,with(o) 本质上跳转到了 o 的范围,因此属性可以通过它们的名称访问:分别为“bad”和“goodProperty”。
with(o) {
bad="new value";
goodProperty=22;
}