Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вопрос по this (https://javascript.ru/forum/events/35190-vopros-po.html)

Atilla 03.02.2013 02:49

Вопрос по 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?

devote 03.02.2013 03:14

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

для новых и старых браузеров:
$(window).resize(function(){
    return page.func.apply(page, arguments);
});

Atilla 05.02.2013 14:53

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

Некоторые объекты создаются конструктором:
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 )
?

devote 05.02.2013 14:59

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

    this.del = function() {
    }

    this.click = function() {
        me.del();
    }
}

Atilla 05.02.2013 16:45

Спасибо, всё работает.


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