2013-11-26 5 views
0

Я пытаюсь написать простой объект спрайт, который добавит себя на холст, когда он инициализируется:как ссылаться на переменную из родительского объекта в JavaScript

function Sprite(source){ 
this.x = 100; 
this.y = 100; 
this.img = new Image(); 
this.img.src = source; 
this.img.onload = function(e){ 
    context.drawImage(this.img, this.x, this.y); 
    }; 
}//end of object Sprite 

Это не работает, как нужно DrawImage к доступ к переменным за пределами обработчика onload. Как я могу получить доступ к переменным внутри моего объекта Sprite изнутри обработчика событий?

+1

К вы не должны полагаться на глобальный объект 'context'. Вы должны вводить контекстную зависимость в экземпляр «Sprite», если он должен сам рисовать. 'Sprite (source, context)' и использование 'this.context', это намного более гибко. – plalx

ответ

0

Объявите переменную:

function Sprite(source){ 
    var sprite = this; 
    this.x = 100; 
    this.y = 100; 
    this.img = new Image(); 
    this.img.src = source; 
    this.img.onload = function(e){ 
    context.drawImage(this, sprite.x, sprite.y); 
    }; 
}//end of object Sprite 

или bind ваша функция (я бы не сделать это здесь как onload обработчики событий, как ожидается, будут связаны с взаимосвязанного изображения):

function Sprite(source){ 
    this.x = 100; 
    this.y = 100; 
    this.img = new Image(); 
    this.img.src = source; 
    this.img.onload = (function(e){ 
    context.drawImage(this.img, this.x, this.y); 
    }).bind(this); 
}//end of object Sprite 
+0

Почему ваша форма 'bind' настолько сложна ...' context.drawImage.bind (context, this.img, this.x, this.y); ' – plalx

+0

@plalx Я не вижу, как это поможет. Проблема связана с привязкой обработчика событий. –

+0

Единственная операция в обработчике - рисовать изображение. 'this.img.onload = context.drawImage.bind (context, this.img, this.x, this.y);' – plalx

Смежные вопросы