Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Значение функции (https://javascript.ru/forum/events/9158-znachenie-funkcii.html)

trikadin 01.05.2010 23:19

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

addEvent= window.ActiveXObject ? function(elem, even, func) {elem.attachEvent("on"+even, func)} : function(elem, even, func, bool) {elem.addEventListener(even, func, bool||false)};


????

Gvozd 01.05.2010 23:41

а вы-то сами как думаете?!
переменая addEvent один раз примет сво значение, и в дальнейшем, при выховах addEvent(params), будет использоватся уже вычисленное значение ф-ции

trikadin 01.05.2010 23:42

Да, да, спасибо, уже понял))

subzey 02.05.2010 20:36

Какой, однако, изощренный способ проверки, есть ли у элемента метод .addEventListener!

trikadin 02.05.2010 23:00

А чем вам не нравится проверка браузера через window.ActiveXObject? Буду благодарен за совет.

Octane 02.05.2010 23:04

В IE9 будет и ActiveXObject и addEventListener. Ваш способ не позволит использовать в нем addEventListener. Почему просто не проверить window.addEventListener?

trikadin 02.05.2010 23:25

Спасибо, Octane.

trikadin 03.05.2010 13:30

Слушайте, а имеет смысл делать проверку на attachEvent? То есть вот так:

addEvent=window.addEventListener ? function(elem, even, func, bool){elem.addEventListener(even, func, bool||false)} : window.attachEvent ? function(elem, even, func){elem.attachEvent("on"+even, func)} : function(elem, even, func){elem["on"+even]=func};

Octane 03.05.2010 13:36

Браузеров, не поддерживающих ни addEventListener, ни attachEvent, не осталось. Хотя я даже не застал момент, когда такие были :)

trikadin 04.05.2010 00:41

Так. Попробовал переписать функцию под prototype. Получилось так:

addEvent=window.addEventListener ? function(even, func, bool){this.addEventListener(even, func, bool||false)} : function(even, func){var elem=this; elem.attachEvent("on"+even, func)};
object.prototype.addEvent=addEvent;


Но оно не работает. Почему - не могу понять, не хватает знаний... Пожалуйста, подскажите в чём ошибка. И стоит ли вообще пытаться написать функцию таким макаром?


Часовой пояс GMT +3, время: 22:09.