Почему мы используем eval, чтобы открыть новое окно? - PullRequest
1 голос
/ 28 сентября 2011

Вот код, с которым сталкивались:

function popUp(URL) {
   day = new Date();
   id = day.getTime();
   eval("page" + id + " = window.open(URL, '" + id + "','....;");
}

Я не понимаю, почему мы используем eval в этом случае, кажется, что многие веб-сайты предлагают это как решение, чтобы открытьнеожиданно возникнуть.Почему мы не просто используем:

var win = window.open("...");

Примеры этого кода:

Всплывающее окно переменного размера

Проверьте, есть ли всплывающее окноуже открыт

и многое другое в результатах поиска Google

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

Поскольку первоначальный разработчик не понимал, что вы можете использовать window['page' + id] там для назначения произвольно глобальной переменной (без var означает, что она идет вверх по цепочке областей действия, в конечном итоге присваивая ее глобальному объекту, window в браузер).

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

Даже если на него ссылались, он должен возвращать ссылку, а не просто назначать ее. Функция должна инкапсулировать свое состояние, а не назначать группу глобальных переменных.

Я предполагаю, что использование времени таково, что никакие два окна не имеют одинаковую ссылку (теоретически, нет никакой гарантии, спасибо RobG ).

1 голос
/ 28 сентября 2011

Единственное отличие, которое делает eval, заключается в установке произвольной переменной ..., на которую вы не сможете ссылаться снова. Я понятия не имею, почему кто-то в здравом уме предложил бы это как решение для открытия окна, поскольку ваш второй фрагмент кода демонстрирует «правильный» способ сделать это.

...