具有eventhandler重载的对象

时间:2012-02-05 13:59:40

标签: javascript javascript-events

目前我正试图在javascript中编写一个resourcemanager。它有两种方法,一种是向管理器添加图像资源,另一种是在添加图像后预加载所有图像:

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();

您可以看到一个有效的示例on jsfiddle

现在这个overoad没有用,为什么会这样呢?我猜测它与原型设计有关,但我似乎无法掌握如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

我不是原型设计方面的专家,所以不能给出有效的答案,为什么它不起作用,但是我可以建议使用“纯函数”方法的替代方法,这种方法很好:

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');
    };
};

如上所述,您的原始覆盖代码可以正常工作 - updated fiddle (如果删除rsmgr.onComplete覆盖,您将按预期“完成”