Показать сообщение отдельно
  #10 (permalink)  
Старый 23.07.2012, 17:12
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Irish.Tippler Посмотреть сообщение
В чём соль? Почему функция таймаута убирает указатель с текущего элемента?
соль в том, что Вы запутались\не знаете, что this во вложенных функциях равен window, или undefined, если скрипт исполняется в строгом режиме.

пример :

(function () {

    alert(this.foo); // "bar"

    (function () {

        alert(this.foo); // undefined
        alert(Object.prototype.toString.call(this)); // ибо this сменился на ГО\undefined.

    })();

}).call({
    foo: "bar"
});


собстно, тут практически (точнее, совсем другое, но эффект тот же) то же самое :
newElement.onclick = function () {

	this.style.backgroundImage = 'url(./img/' + this.num + '.png)';

        // вот в этой функции this сменится на window.
	setTimeout(function () {
                // а так как this.style вернёт undefined, появится то, что появилось :)
		this.style.backgroundImage = 'none';
	}, 1500);
}


как обойти ?

да просто сохранить контекст в локальной переменной - почему функция будет видеть локальную область видимости той функции, в которой определена - совершенно другой вопрос

newElement.onclick = function () {

*!*
	var _this = this;
*/!*

	this.style.backgroundImage = 'url(./img/' + this.num + '.png)';

	setTimeout(function () {
		// юзаем _this вместо this.
		_this.style.backgroundImage = 'none';
	}, 1500);
}
Ответить с цитированием