Замыкание + конструктор + событие
Вот замыкает меня на замыканиях ничего не могу поделать. Помогите. Очень много читал про замыкания, не доходит до меня и всё.
Как получить в функции-обработчике события (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, время: 09:42. |