У меня есть простая функция, которая является членом класса, ImageUtils, который загружает изображение:Как сохранить объем функции обратного вызова в JavaScript,
this.loadSingleImage = function(path, callbackComplete, callbackFail)
{
var img = new Image();
img.src = path;
img.onload = callbackComplete;
img.onerror = callbackFail;
return img;
}
Я пытаюсь понять, как быть в состоянии получить доступ переменные вне области функции обратного вызова, из функции обратного вызова. Я читал по вызову() и apply(), но ничто из этого не имеет для меня смысла в отношении функции выше. В настоящий момент область функции обратного вызова - ImageUtils. Мне нужно, чтобы он был тем же масштабом, что и я называл ImageUtils.loadSingleImage().
Изменить, чтобы указать дополнительные данные:
Рассмотрим следующий пример:
var Image_Utils = new function()
{
this.loadSingleImage = function(path, callbackComplete, callbackFail)
{
var img = new Image();
img.src = path;
trace(' load image: ' + path);
img.onload = callbackComplete;
img.onerror = callbackFail;
return img;
}
}
var SomeOtherClass = new function()
{
this.init = function()
{
Image_Utils.loadSingleImage('somepath', SomeOtherClass.onImageLoaded, SomeOtherClass.onImageFailed);
}
this.onImageLoaded = function()
{
// console.log(this);
// returns Img, not SomeOtherClass
// why?
}
this.onImageFailed = function()
{
// console.log(this);
// returns Img, not SomeOtherClass
// why?
}
}
Функция scope зависит от того, где вы определяете функцию, а не там, где вы ее называете. – dandavis
, вы не можете сделать это из кода, который вы предоставили, это нужно было бы сделать, когда вы передадите (и/или определите) обратный вызов. –
вы можете запомнить аргументы и проксировать их для обратного вызова с помощью bind(): img.onload = callbackComplete.bind (this, path, img), где полная функция имеет путь и формальные параметры img. – dandavis