Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Контекст this для событий (https://javascript.ru/forum/events/50869-kontekst-dlya-sobytijj.html)

danik.js 15.10.2014 17:39

Вот тебе функция f:
function f(event) {
alert(this);
}

danik.js 15.10.2014 17:42

Цитата:

Сообщение от Boolean_Type
console.log(this)

Ах ты хитрая жопа!!! Значит, в неинлайн ты логируешь тупо this в теле обработчика, в инлайн вызываешь какую-то левую? f()

И в чем тут логика?

danik.js 15.10.2014 17:43

Вот инлайн обработчик. Что блядь в нем не так? Куда там this не показывает?
<button onclick="console.log(this)">Button</button>

Boolean_Type 15.10.2014 17:44

Цитата:

Сообщение от danik.js (Сообщение 335754)
Да блядь жеж! А при не-инлайн не надо чтоли? Ты троллишь чтоли? Покажи как ты в неинлайн обработчике вызываешь функцию f и не передаешь this, и в функции f this указывает не на window. Жду

:lol:
Эй, а кому же я предыдущий пример печатал??? Вот кусок из него:
<button id="l">тут НЕ инлайн</button>
<script type="text/javascript">
//ещё раз, об этом Костянет писал тоже: здесь в вызове не передаётся this, но в ф-ции обработчики контекст устанавливается правильно, метод не инлайновый
document.getElementById('l').onclick = function () { //НИ ХЕРА НЕ ПЕРЕДАЮ
     alert(this); //ОХРЕНЕТЬ, this - это [object HTMLButtonElement]
}
</script>

Boolean_Type 15.10.2014 17:44

Цитата:

Сообщение от danik.js (Сообщение 335760)
Вот инлайн обработчик. Что блядь в нем не так? Куда там this не показывает?
<button onclick="console.log(this)">Button</button>

Да, тут показывает, ты же его явно передал. А в моём вопросе не показывал, ибо я не передал его явно :)

danik.js 15.10.2014 17:45

Цитата:

Сообщение от Boolean_Type
Да что Вы говорите.

И чем отличается обработчик от функции? Функция, когда ее назвали обработчиком, перестает быть функцией? Приобретает новые свойства?

danik.js 15.10.2014 17:47

Цитата:

Сообщение от Boolean_Type
Да, тут показывает, ты же его явно передал

Смотрим твой код:
Цитата:

Сообщение от Boolean_Type
document.getElementById('l').onmouseover = function (e) {
console.log(this)
}

А ну немедленно перестань передавать this в console.log() !:D

danik.js 15.10.2014 17:49

Цитата:

Сообщение от Boolean_Type
//НИ ХЕРА НЕ ПЕРЕДАЮ

Ты идиот. Что и куда тут можно передать? Ты записываешь функцию в свойство onclick
Онологично как я задаю атрибут onclick с телом функции.

danik.js 15.10.2014 17:51

Покажи, где тут разничия в поведении?
1)  <a onclick =                "       alert(this)      ">
2)    a.onclick = function() {       alert(this)      };

Boolean_Type 15.10.2014 17:52

Цитата:

Сообщение от danik.js (Сообщение 335759)
Ах ты хитрая жопа!!! Значит, в неинлайн ты логируешь тупо this в теле обработчика, в инлайн вызываешь какую-то левую? f()

И в чем тут логика?

:lol: danik.js, я не успеваю за твоими ответами)
Вот именно, я не понимал, почему при вызове левой f() контекст не передаётся. Я думал - раз событие, так this во всех ф-циях будет показываться, которые запущены этим событием. Ошибался.


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