Объект с перегрузкой обработчика событий - PullRequest
0 голосов
/ 05 февраля 2012

В настоящее время я пытаюсь написать менеджер ресурсов в javascript.У него есть два метода: один для добавления ресурса изображения в менеджер, а другой - для предварительной загрузки всех изображений после их добавления:

ResourceManager = function(){};
ResourceManager.prototype = function(){

 var imageList = new Array(),

     addImage = function(imageUrl){
      imageList.push(imageUrl);
     },
     loadImages = function(){
      //Do stuff for loading here
      onComplete();
     },
     onComplete = function(){
      alert('finished');
     };

     return {
      addImage: addImage,
      loadImages: loadImages,
      onComplete: onComplete
     }
}();

Затем я хочу использовать его следующим образом

var rsmgr = new ResourceManager();
rsmgr.onComplete = function(){
 alert('completed');
};
rsmgr.addImage('image.png');
rsmgr.loadImages();

Вы можете увидеть рабочий пример на jsfiddle

Теперь этот overoad не работает, так почему же это происходит?Я предполагаю, что это связано с прототипированием, но я не могу понять, как это исправить.

1 Ответ

0 голосов
/ 05 февраля 2012

Я не специалист по прототипированию, поэтому не могу дать верный ответ, почему он не работает, однако я могу предложить альтернативный способ, используя подход «чистой функции», который прекрасно работает:

function ResourceManager() {
    this.imageList = new Array();

    this.addImage = function(imageUrl) {
        this.imageList.push(imageUrl);
    };

    this.loadImages = function() {
        //Do stuff for loading here
        this.onComplete();
    };

    this.onComplete = function() {
        alert('finished');
    };
};

Имея егонаписанное, как указано выше, приводит к тому, что ваш исходный код переопределения работает - обновленная скрипта .
(Если вы удалите переопределение rsmgr.onComplete, вы получите «готово», как и ожидалось)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...