with в JavaScript и VBScript

Одной из бесполезных конструкций языка JavaScript называют «with». Неспроста, эта конструкция непрозрачна и потенциально может создать непростые проблемы. Небольшой код:
with (MyObject) {
    width = '100px';
    height = '200px';
    display = 'block';
}
Что будет, если свойства с таким именем не найдётся? Код заменит значения переменных width/height/display или же создаст их, если их ещё не было. Что приведёт к проблемам, если мы в связанном коде где-то используем такие имена.

С языком VBScript я знаком с тех пор как программировал, используя технологию ASP. В дальнейшем, я иногда использовал его, чтобы программировать что-то для Internet Explorer, всё-таки некоторые вещи для этого браузера было проще делать в нём.

Этот язык я, в общем-то, не люблю (в отличие от JavaScript), но вот конструкция «With» устроена в нём разумнее:
With MyObject
    .width = "100px"
    .height = "200px"
    .display = "block"
End With
Заметили точки впереди? Они говорят о том, что используются не просто переменные, а свойства (ну или методы) объекта, указанного в «With». Вот так просто решается куча проблем.
2 июля 2010 14:15

Victor Grinchik (wiktar.com)
2 июля 2010, 15:44

Как я понимаю, преимущество конструкции with перед многократным дублированием document.getElementById('popup').style в том, что не придётся несколько раз вызывать getElementById?

bolk (bolknote.ru)
2 июля 2010, 15:55, ответ предназначен Victor Grinchik (wiktar.com):

Вообще-то, можно просто положить ссылку на «document.getElementById('popup').style» в переменную, было бы примерно то же самое. Это такой синтаксический сахар, показывающий «а вот тут мы работает с объектом MyObject».

me.yahoo.com/kuchin (me.yahoo.com/kuchin)
2 июля 2010, 15:56

В jQuery это очень удобно сделано, внутри функции работаешь с обьектом (или набором обьектов) как с this. Единственный недостаток - если такого обьекта нет, то нет и уведомления, просто функция обработки не запустится.

me.yahoo.com/kuchin (me.yahoo.com/kuchin)
2 июля 2010, 15:57

Кстати, я ввел имя/адрес блога "kuchin.net", а меня показывает как me.yahoo.com/kuchin - это "delegate" адрес.

bolk (bolknote.ru)
2 июля 2010, 17:51, ответ предназначен me.yahoo.com/kuchin:

Так надо и указывать «delegate», а не «local»

kuchin (kuchin.net)
2 июля 2010, 18:37

Yahoo не поддерживает OpenID 1.х, только 2.0, а там не выставить delegate. Поменял сервер на Yandex.

vkv (vkv.livejournal.com)
2 июля 2010, 19:49

эээ, UnhandledException
message: Undefined variable: MyObject
это ж не пехапе всетаки какой

vkv (vkv.livejournal.com)
2 июля 2010, 19:56

а, понял, если объект есть, а свойства с таким именем нет.
коряво, да.

bolk (bolknote.ru)
2 июля 2010, 20:18, ответ предназначен vkv (vkv.livejournal.com):

Да это я сам напутал. Неожиданно оказалось, что надо на встречу и сырой текст пришлось запостить как есть.

boltai-shaltai (инкогнито)
3 июля 2010, 23:53

Здесь акцент именно на особенности реализации with в VBScript?
В нём, в уродливом VBScript, и с "коллекциями" совсем другой коленкор. Я его позабыл уже, а порой ведь хотелось делать inline-вставки в JScript.

Или тема вообще о непригодности with ни для чего?

bolk (bolknote.ru)
4 июля 2010, 09:18, ответ предназначен boltai-shaltai

Тут написано о том, что в VBScript конструкция «with» сделана лучше. Кажется немного текста же?

boltai-shaltai (инкогнито)
4 июля 2010, 13:48

Странный тон, Евгений (

Ну глупый вопрос, да. Вероятно, мне хотелось услышать несколько слов "о вредности with" безотносительно бейсика.

jankkhvej (jankkhvej.blogspot.com)
4 июля 2010, 18:42

http://stackoverflow.com/questions/61552/are-there-legitimate-uses-for-javascripts-with-statement видели?

bolk (bolknote.ru)
5 июля 2010, 12:43, ответ предназначен boltai-shaltai

Странный тон, Евгений (
Пардон, не хотел обидеть.
Вероятно, мне хотелось услышать несколько слов "о вредности with" безотносительно бейсика.
Я как раз написал о недостатках with и пути их решения.

bolk (bolknote.ru)
5 июля 2010, 12:46, ответ предназначен jankkhvej (jankkhvej.blogspot.com):

Про let? Да, я знаком с этой конструкцией в JS.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)