Я знаю, что with
предположительно является "плохой частью", но я никогда не заботился о нем, потому что я просто использовал его тщательно (так же, кстати, с операторами var
в блоках). Теперь я понимаю, что with
был изгнан из строгого режима EcmaScript 5.0.
Здесь мой прецедент: у меня есть библиотека, которая экспортирует около 20 или 30 функций. Большая часть моего кода никогда не использует какую-либо библиотеку, кроме тех частей, которые ее используют, много используют.
Сейчас мой код выглядит так:
with (mylib) {
f1(f2(f1(), f3())); // five or 10 more lines like this
}
Чтобы быть совместимым, мне придется...
a) Переместите все функции в глобальную область (yuck).
b) mylib.f1(mylib.f2(mylib.f1(), mylib.f3()));
(который является подробным)
c) var x = mylib; x.f1(x.f2(x.f1(), x.f3()));
(который немного менее подробный, но менее значимый).
Скажите, пожалуйста, что там есть лучшее решение. Я хочу, чтобы каким-то образом экспортировать содержимое объекта в уровень области видимости (это именно то, для чего был with
).
EDIT:
Что-то я должен был прояснить. Я не хочу, чтобы люди объясняли мне, почему я не хочу делать то, что я хочу делать; Я хочу, чтобы люди объясняли мне, как делать то, что я действительно хочу делать.
Дело в том, что по причинам, не зависящим от моего контроля, экспорт библиотеки имеет очень узнаваемые имена. Вместо того, чтобы называть их f1, f2 и т.д., Предположим, что они называются Bobs_Library_Function_F1, Bobs_Library_Function_F2 и т.д.
Мне просто не нужно много кода, который выглядит как
Bobs_Library.Bobs_Library_Function_F1(Bobs_Library.Bobs_Library_Function_F2(Bobs_Library.Bobs_Library_Function_F1(), Bobs_Library.Bobs_Library_Function_F3()));
(Настоящие имена не так уж плохи, они действительно красивы на самом деле, и префикс разрезает на это.)
Любой, кто серьезно не согласен с этим, ну, я надеюсь, вы никогда не будете использовать $.whatever
, когда вы должны использовать jQuery.whatever
, потому что это заставило бы вас выглядеть крупным лицемерным олетом.
Я думаю использовать $$.f1
...
ДАЛЬНЕЙШЕЕ ИЗОБРАЖЕНИЕ
Серьезно, спасибо за все входные данные, но я не ищу опрос о том, лучше ли (a), (b) или (c). Я ищу выбор (d), который делает то, чтоwith
делает это хорошо.
Должен ли я, по крайней мере, вывести из строя режим блочного режима?