Замыкание + конструктор + событие
Вот замыкает меня на замыканиях ничего не могу поделать. Помогите. Очень много читал про замыкания, не доходит до меня и всё.
Как получить в функции-обработчике события (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); Благодарю |
просто пиши 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(); |
|
так попробуйте
function Constr(ctx) { var t=this; ..... this.getImdt = function(x,y){ alert(t.ctx);... |
Dim@, dmitriymar,
img.onload - событие, получающее объект event вместо this мне не нужно event.ctx, мне нужно obj.ctx |
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); |
так как при назначении обработчиков теряется 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 через bind, либо определить выше переменную, которая будет ссылаться на this
|
vadim5june, zebra
Благодарю, понял, сижу переосмысливаю. melky, вот это решение даже не ожидал, благодарю, пойду почитаю про bind. зы: получается, что в двух решениях задачи, замыкания не используются?) |
Часовой пояс GMT +3, время: 07:45. |