Подтвердить что ты не робот

Что делает "с" в JavaScript?

Я видел код JavaScript, который начинается с with. Это немного сбивает с толку. Что он делает и как его можно использовать правильно?

with (sObj) return options[selectedIndex].value;
4b9b3361

Ответ 1

Это добавляет к объему операторов, содержащихся в блоке:

return sObj.options[selectedIndex].value;

может стать:

with (sObj)
    return options[selectedIndex].value;

В вашем случае это не так уж и много... но учтите следующее:

var a, x, y;
var r = 10;
a = Math.PI * r * r;
x = r * Math.cos(PI);
y = r * Math.sin(PI /2);

становится:

var a, x, y;
var r = 10;
with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

... сохраняет пару нажатий клавиш. Документация Mozilla на самом деле довольно неплохо объясняет вещи чуть более подробно (наряду с плюсами и минусами использования):

с - Центр разработки Mozilla

Ответ 2

оператор with - чистый синтаксический сахар, но он также может вызывать некоторые неприятные ошибки.

См. с выражением, которое считается вредным для уточнения:

Если вы не можете прочитать программу и уверены, что знаете, что она собирается делать, вы не можете быть уверены, что она будет работать правильно. По этой причине следует избегать оператора with.

Ответ 3

В том, что с блоком вам не нужно вводить:

sObj.options[selectedIndex].value

но вы можете просто использовать:

options[selectedIndex].value

Ответ 4

Его эквивалент

return sObj.options[selectedIndex].value;

With позволяет вам выдать блок операторов в контексте конкретного объекта. Поэтому все утверждения в блоке With считаются членами объекта в скобках.

Это может сделать код более читаемым в разы, , но, что также может привести к двусмысленности, поскольку ссылки на переменные могут быть либо с sObj, либо с глобальным.

законное использование для javascript с инструкцией: D

Ответ 5

Я бы рекомендовал НЕ использовать это из-за проблем с производительностью, но что это означает:

для объекта sObj (здесь предположительно элемент select), все дочерние элементы и свойства, указанные на этом (или между следующими фигурными фигурными скобками), рассматривают это как их родительскую область.

Ответ 6

Это не функция (как указано в заголовке вопроса до ее редактирования), но утверждение. Это может иметь большее значение, если образец кода отформатирован следующим образом:

with (sObj){
    return options[selectedIndex].value;
}

Относительно того, что он делает (Источник)

Оператор with устанавливает объект по умолчанию для набора операторов. JavaScript ищет любые неквалифицированные имена в наборе операторов, чтобы определить, являются ли имена свойствами объекта по умолчанию. Если неквалифицированное имя соответствует свойству, то свойство используется в инструкции; в противном случае используется локальная или глобальная переменная.

Это означает, что в образце кода сначала проверяется, является ли options свойством sObj. Если он тогда options относится к sObj.options, в противном случае он проверяет другие области для переменной, определяемой именем options

Недостатком использования инструкции with является то, что невозможно понять, просто взглянув на код, к которому обращаются. Существуют и другие альтернативы, как показано в в этой статье

Ответ 7

Ваш пример можно переписать как...

return sObj.options[selectedIndex].value;

..., поскольку оператор 'with' помещает все связанные операторы в область действия объекта. В этом случае это довольно бессмысленно, но если вы делаете много операций над 'sObj', тогда это экономит много ввода.

Полностью фиктивный пример.

with (sObj) 
{
   if(options[selectedIndex].value < 10){
       options[selectedIndex].value++;
       total+ = options[selectedIndex].value;
   }
}

Но, сказав это, часто бывает, что сохранение типизации может быть достигнуто лучшими способами.