Показать сообщение отдельно
  #42 (permalink)  
Старый 16.10.2014, 00:34
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 02.02.2014
Сообщений: 48

Сообщение от kostyanet Посмотреть сообщение
danik.js, нахер вообще что-то вписываете? какие-то ивенты-шмывенты.

смысла дискуссии я не уловил. Если у функции аргументы не обозначены явным образом - значит не обозначены явным образом, а this ну просто обожает появляться неявным образом, собственно как и все прочие переменные дружеского и вражеского окружения.

http://learn.javascript.ru/play/eG9lQ
Таки да, получается следующее:
1) если обработчик вызывается инлайново, ему надо передать this, иначе контекст будет window. Я прочёл на сайте следующее: "При создании обработчика браузером по разметке он автоматически создает функцию из его содержимого."
Если написать:
<input type="button" id="button" onclick="f()"/>

авт-ки создастся следующее:
/****что создаётся****/
document.getElementById('button').onclick = function() {
  //здесь this - это button, но к f это не имеет отношения, т.к. это просто вызов левой ф-ции в обработчике
  f();
}
/******/
function f () {
  alert(this); //выдаст окно
}

Если же явно передать this:
<input type="button" id="button" onclick="f(this)"/>

то и вызов будет другим:
/****что создаётся****/
document.getElementById('button').onclick = function() {
  //здесь this - это button, следоват-но, button и передаётся в f
  f(this);
}
/******/
function f (right_this) {
  alert(right_this); //выдаст button
}

Излюбленный пример danik.js показывает то же, явную передачу:
a.onclick = function() { alert(this) };

/****что создаётся****/
a.onclick = function() {
  //здесь this - это button, следоват-но, button и передаётся в alert
  alert(this);
}
/******/


2) если неинлайново, this передавать не надо
<input type="button" id="button">

document.getElementById('button').onclick = function() {
  //здесь this - это button, и никакой обёртки не создаётся
  alert(this);
}
//и никакой лев. ф-ции
Ответить с цитированием