是否可以访问只有在“ 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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top