Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.07.2012, 23:40
Интересующийся
Отправить личное сообщение для Вовочка Посмотреть профиль Найти все сообщения от Вовочка
 
Регистрация: 09.01.2012
Сообщений: 13

Замыкание + конструктор + событие
Вот замыкает меня на замыканиях ничего не могу поделать. Помогите. Очень много читал про замыкания, не доходит до меня и всё.

Как получить в функции-обработчике события (this.getImdt) какое либо свойства из конструктора (this.ctx)

function Constr(ctx) {
	this.ctx = ctx;
	this.loadImg = function() {
		var img = new Image();
		img.src = "http://webstorm/densitometr/Densitometr/img/Pan.jpg";
		img.onload = this.getImdt;
	};
	this.getImdt = function(x,y){
		alert(ctx); // нужно получить this.ctx 
	};
}
var ctx = "something text";
var obj = new Constr(ctx);


Благодарю
Ответить с цитированием
  #2 (permalink)  
Старый 28.07.2012, 23:51
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

просто пиши this.ctx :
function Constr(ctx) {
	this.ctx = ctx;
	this.getImdt = function(x,y){
		alert(this.ctx); // нужно получить this.ctx 
	};
        
}
var ctx = "something text";
var obj = new Constr(ctx);
obj.getImdt();
Ответить с цитированием
  #3 (permalink)  
Старый 28.07.2012, 23:57
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Вовочка,
Мухи отдельно, котлеты отдельно.
http://javascript.ru/tutorial/object/thiskeyword
Ответить с цитированием
  #4 (permalink)  
Старый 28.07.2012, 23:57
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

так попробуйте
function Constr(ctx) {
var t=this;
.....
this.getImdt = function(x,y){
        alert(t.ctx);...
Ответить с цитированием
  #5 (permalink)  
Старый 29.07.2012, 00:00
Интересующийся
Отправить личное сообщение для Вовочка Посмотреть профиль Найти все сообщения от Вовочка
 
Регистрация: 09.01.2012
Сообщений: 13

Dim@, dmitriymar,

img.onload - событие, получающее объект event вместо this

мне не нужно event.ctx, мне нужно obj.ctx

Последний раз редактировалось Вовочка, 29.07.2012 в 00:03.
Ответить с цитированием
  #6 (permalink)  
Старый 29.07.2012, 00:03
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

function Constr(ctx) {
        var self = this;
	this.ctx = ctx;
	this.loadImg = function() {
		var img = new Image();
		img.src = "http://webstorm/densitometr/Densitometr/img/Pan.jpg";
		img.onload = self .getImdt;
	};
	this.getImdt = function(x,y){
		alert(ctx); // нужно получить this.ctx 
	};
}
var ctx = "something text";
var obj = new Constr(ctx);
Ответить с цитированием
  #7 (permalink)  
Старый 29.07.2012, 00:06
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

так как при назначении обработчиков теряется this, то можно его залочить с помощью bind :
(если я правильно понял)
img.onload = this.getImdt.bind(this);

пример :
<script>
function Constr(ctx) {
	this.ctx = ctx;
	this.loadImg = function() {
		var img = new Image();
		img.src = "http://javascript.ru/forum/images/smilies/lol.gif";
		img.onload = this.getImdt.bind(this);
	};
	this.getImdt = function(x,y){
		alert(this.ctx); // нужно получить this.ctx 
	};
}
var ctx = "something text";
var obj = new Constr(ctx);
obj.loadImg();
</script>

Последний раз редактировалось melky, 29.07.2012 в 00:09.
Ответить с цитированием
  #8 (permalink)  
Старый 29.07.2012, 00:12
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

О да, что-то я не то написал. В ообщем как написал melky через bind, либо определить выше переменную, которая будет ссылаться на this
Ответить с цитированием
  #9 (permalink)  
Старый 29.07.2012, 00:13
Интересующийся
Отправить личное сообщение для Вовочка Посмотреть профиль Найти все сообщения от Вовочка
 
Регистрация: 09.01.2012
Сообщений: 13

vadim5june, zebra

Благодарю, понял, сижу переосмысливаю.

melky, вот это решение даже не ожидал, благодарю, пойду почитаю про bind.


зы: получается, что в двух решениях задачи, замыкания не используются?)

Последний раз редактировалось Вовочка, 29.07.2012 в 00:36.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Отловить событие simple Events/DOM/Window 3 11.05.2011 14:20
событие на динам. элемент (jQery, Ajax, php) kost_ik jQuery 2 06.11.2010 12:16
событие onclick chelsea Общие вопросы Javascript 1 17.09.2010 11:31
какое событие возникает во время формирования html IT-AleX Events/DOM/Window 2 20.02.2009 16:13