Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2013, 02:49
Интересующийся
Отправить личное сообщение для Atilla Посмотреть профиль Найти все сообщения от Atilla
 
Регистрация: 28.06.2009
Сообщений: 21

Вопрос по this
Имеется некоторый объект page:
var page = {
	this.header = $( "#header" );
	this.title = $( "#title" );
	...
	func :	function () {
		console.log(this);
		...
	}
}

При вызове метода func просто как
page.func ()

this ссылается как и надо на объект page. Но при вызове через
$(window).resize ( page.func )

this ссылается на window.

Собственно вопрос - как при вызове через .resize() сделать так, чтобы this ссылался на page, а не на window?

Последний раз редактировалось Atilla, 03.02.2013 в 02:52.
Ответить с цитированием
  #2 (permalink)  
Старый 03.02.2013, 03:14
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

для новых браузеров:
$(window).resize(page.func.bind(page));

для новых и старых браузеров:
$(window).resize(function(){
    return page.func.apply(page, arguments);
});
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2013, 14:53
Интересующийся
Отправить личное сообщение для Atilla Посмотреть профиль Найти все сообщения от Atilla
 
Регистрация: 28.06.2009
Сообщений: 21

Спасибо, помогло. Только теперь новый вопрос, и предложенный метод не работает.

Некоторые объекты создаются конструктором:
var point = function ( parameters ) {
	
	...

	this.dom.del = $( "<div>", {
		"class" :	"delete"
	}).appendTo( page.left )

	this.dom.del.click ( function () {
		console.log ( $(this) )
	} )
	
	this.del = function () {
		...
	}


При клике на объект this.dom.del должна вызываться функция-член из этого же конструктора this.del(), но проблема в том, что при клике, в контексте .click() this будет ссылаться на объект вызвавший его - на DOM объект, у которого, естественно, нет метода .del().

Собственно вопрос - как передать в контекст .click() "правильный" this, чтобы можно было вызвать this.del():
this.dom.del.click ( this.del )
?
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2013, 14:59
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var point = function() {
    var me = this;

    this.del = function() {
    }

    this.click = function() {
        me.del();
    }
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2013, 16:45
Интересующийся
Отправить личное сообщение для Atilla Посмотреть профиль Найти все сообщения от Atilla
 
Регистрация: 28.06.2009
Сообщений: 21

Спасибо, всё работает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по each() и перебору строк таблицы battrack jQuery 1 09.02.2012 14:30
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Я как ответить на вопрос - есть ли жизнь на других планетах? TicTac Оффтопик 5 28.04.2011 04:29
Вопрос на миллион. Ajax и идентификация по адресной строке. 0931454574 AJAX и COMET 5 31.03.2011 11:54
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49