Как передать обратный вызов функции и этой функции для вызова обратного вызова с исходными аргументами callee
(но замените первый аргумент на результат)?Пиксельный аргумент в функции и обратном вызове с исходными аргументами
У меня есть этот пример:
this.createImage: function(base64, callback) {
var img = new Image();
img.src = base64;
img.onLoad = function() {
callback(this); // I also want to pass position here (this + arbitrary number of arguments)
}
}
this.addToCanvas: function(item, position) {
if(!this.isImage(item)) { // assume `isImage()` check if item is Image, & skips if true
var item = this.createImage(item, this.addToCanvas);
return;
}
item.position = position;
// Supposedly here I am certain that image is an Image() and not a
// base64 string
}
Поэтому в основном я задаюсь вопросом, как я могу иметь createImage
для обратного вызова addToCanvas
, но вместо того, чтобы с оригинальным position
прошел, но item
нашли место загруженного img
.
Идея заключается в том, чтобы быть в состоянии назвать addToCanvas()
либо с Image
или base64 String
и все еще быть в состоянии преобразовать внутренне если необходимо.
Однако я хотел бы еще раз использовать createImage()
с другими функциями, которые должны быть вызваны с другим (произвольным) числом аргументов. Мне интересно, можно ли не пара вышеуказанные функции вместе.
Мне сложно понять, что вы хотите. Вы хотите вызвать 'createImage()' с кучей аргументов (и неопределенного числа) и иметь аргументы после того, как первые два будут отправлены на обратный вызов? Я также не вижу, как 'addToCanvas()' имеет какое-либо соединение с 'createImage()'. Когда вы показываете их выше, они не связаны вообще (никто не называет другого). – jfriend00
@ jfriend00 Я бы хотел называть 'addToCanvas()', и если 'item' не является изображением, преобразуйте его с помощью' createImage() 'и обратный вызов, передавая ему исходный аргумент' position'. - Вторая часть. В идеале я должен был бы называть 'createImage()' от других функций и возвращать их с исходными аргументами, чтобы их можно было повторно использовать. Имеет больше смысла? –
У вас возникнет проблема в том, что если преобразование необходимо, конечный обработчик 'onLoad' будет вызван асинхронно, поэтому' item.position = position' будет уже запущен. Таким образом, в основном вам нужно, чтобы 'addToCanvas()' получал обратный вызов, который либо обертывается в другую функцию, либо передается, когда требуется преобразование, или немедленно вызывается, когда нет. –