область действия и свойства «с» в квадратных скобках

StackOverflow https://stackoverflow.com/questions/2986026

Вопрос

Можно ли получить доступ к свойствам объекта, к которым можно получить доступ только с помощью квадратных скобок внутри оператора «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
}

Ты видел это? ценность() это волшебное слово. Он возвращает примитивное значение своего родительского объекта или, если объект не имеет примитивного значения, сам объект. Каждый объект и объект, похожий на примитив, наследуют этот метод, так как он является встроенным свойством на Object.prototype. Анкет Так ... вот ты.

Другие советы

Обычно ключевое слово 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"!
}

Надеюсь, это поможет.

Как я понимаю, с (O) по существу прыгает к объему O, свойства доступны по их имени: «Плохой» и «GoodProperty» соответственно.

with(o) {
  bad="new value";
  goodProperty=22;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top