1

是否可以在“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"?
}
4

3 回答 3

2

哇,这很旧,但这里的答案是错误的,实际上有办法完全按照你的要求去做。

with({'!@#$%': 'omg', d: 'hai'}) {
  console.log(d); //hai - naturally
  console.log(valueOf()['!@#$%']); //omg - OMG
}

你看见了吗?valueOf()是一个神奇的词。它返回其父对象的原始值,或者如果对象没有原始值,则返回对象本身。每个对象和类对象原语都继承此方法,因为它是Object.prototype. 所以……给你。

于 2010-09-10T19:36:26.850 回答
1

通常 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"!
}

希望有帮助。

于 2010-06-06T22:09:39.950 回答
0

据我了解,with(o) 本质上跳转到了 o 的范围,因此属性可以通过它们的名称访问:分别为“bad”和“goodProperty”。

with(o) {
  bad="new value";
  goodProperty=22;
}
于 2010-06-06T21:56:50.213 回答