Edit: Спасибо Тиму за ответ это помоглоИзменение объекта, который был возвращен
я не уверен, если вопрос поставлен совершенно правильно для моей проблемы ... В любом случае, я пытаюсь создать Функция getImage для использования в моей игре html5. Я хочу, чтобы API был спроектирован так, чтобы можно было дать аргумент логического prerender. У меня возникли проблемы с его внедрением, так что бит предварительной обработки может изменить возвращаемое изображение.
Код, который использует функцию выглядит следующим образом:
var resources = {
image: getImage('path/to/my/image.png'),
prerendered: getImage('my/prerendered/image.png', true)
};
И код функции GetImage выглядит следующим образом:
var getImage = function (source, prerender) {
var img = new Image(); // store as empty image
img.onload = function() {
if (prerender) { // all my prerendering code
var can = document.createElement('canvas');
var ctx = can.getContext('2d');
can.width = img.width;
can.height = img.height;
ctx.drawImage(img, img.width, img.height);
// right here is where I attempt to modify img
// but since it's already been returned, I'm not changing the returned value - I think
img = can;
}
img.ready = true; // a property my game uses to check if the resource is ready
};
img.src = source; // load that badboy
return img;
};
Одно решение, которое я попытался было обернуть IMG в объекте и просто имейте это свойство, например
var wrapper = {img: new Image()};
Но это кажется уродливым, и я думаю, что есть лучшее решение
Верните 'can' вместо' img', если 'prerendered === true'? – Teemu
Хм, но это только вернется из функции onload. Думаю – Matt
Пожалуйста, используйте свое воображение ... Вы берете создание 'can' из' onload' и вместо этого помещаете его в блок 'if'. – Teemu