Книга: JavaScript. Подробное руководство, 6-е издание

5.7.1. Инструкция with

5.7.1. Инструкция with

В разделе 3.10.3 мы обсуждали область видимости переменных и цепочки областей видимости - список объектов, в которых выполняется поиск при разрешении имен переменных. Инструкция with используется для временного изменения цепочки областей видимости. Она имеет следующий синтаксис:

with (объект) инструкция

Эта инструкция добавляет объект в начало цепочки областей видимости, выполняет инструкцию, а затем восстанавливает первоначальное состояние цепочки.

Инструкция with не может использоваться в строгом режиме (раздел 5.7.3) и не рекомендуется к использованию в нестрогом режиме: избегайте ее использования по мере возможности. Программный код JavaScript, в котором используется инструкция with, сложнее поддается оптимизации и наверняка будет работать медленнее, чем эквивалентный программный код без инструкции with.

На практике инструкция with упрощает работу с глубоко вложенными иерархиями объектов. В клиентском JavaScript вам наверняка придется вводить выражения, как показано ниже, чтобы обратиться к элементам HTML-формы:

document.forms[0].address.value

Если подобные выражения потребуется записать много раз, можно воспользоваться инструкцией with, чтобы добавить объект формы в цепочку областей видимости:

with(document.forms[0]) {
  // Далее следуют обращения к элементам формы непосредственно, например:
  name.value = "";
  address.value = "";
  email.value = "";
}

Этот прием сокращает объем текста программы - больше не надо указывать фрагмент document.forms[0] перед каждым именем свойства. Этот объект представляет собой временную часть цепочки областей видимости и автоматически участвует в поиске, когда JavaScript требуется разрешить идентификаторы, такие как address. Избежать применения инструкции with достаточно просто, если записать предыдущий пример, как показано ниже:

var f = document.fоrms[0];
f. name, value = "";
f.address.value = "";
f.email.value =" ";

Имейте в виду, что цепочка областей видимости используется только для поиска идентификаторов и не используется при их создании. Взгляните на следующий пример:

with(o) х = 1;

Если объект о имеет свойство х, то данный программный код присвоит значение 1 этому свойству. Но если х не является свойством объекта о, данный программный код выполнит то же действие, что и инструкция х = 1 без инструкции with. Он присвоит значение локальной или глобальной переменной с именем х или создаст новое свойство глобального объекта. Инструкция with обеспечивает более короткую форму записи операций чтения свойств объекта о, но не создания новых свойств этого объекта.

Оглавление книги


Генерация: 0.921. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз