2010-11-26 68 views
10

假設我有一個返回自己的成員函數的對象:我可以在Javascript中爲我創建的對象創建自定義事件嗎?

/* -- Object 1 -- */ 
function Object1(){ 
    this.me  = new Image(10,10); 
    this.me.src = "someImgUrl.jpg"; 
    this.publish = function(){ 
     return this.me; 
    } 
} 

在生產中:

var Obj1 = new Object1(); 
document.body.appendChild(Obj1.publish()); 

現在,假設我想創建一個事件,火災時,該對象的發佈()方法被調用,但在圖像返回後(類似於「onPublished()」事件)。說,要將圖像尺寸更改爲100x100。我將如何創建它,我將在哪裏「附加」它?

如果我不夠清楚,請告訴我。這是我能想到的最簡單的演示。

回答

8

一個簡單的例子:

function Object1() { 
    'use strict'; 

    this.me = new Image(10, 10); 
    this.me.src = "someImgUrl.jpg"; 
    this.publish = function() { 
     if (typeof this.onPublish === "function") { 
      setTimeout(this.onPublish, 1); 
     } 

     return this.me; 
    }; 
} 

var Obj1 = new Object1(); 
Obj1.onPublish = function() { 
    // do stuff 
}; 

Obj1.publish(); 
+2

這看起來像它會在返回圖像之前執行onPublish()事件(如果情況並非如此,請讓我知道)。取而代之的是,如果我希望它在迴歸之後開火,我該怎麼辦? – 2010-11-26 16:54:02

0

或者,你可以使用一些第三方框架(如bob.js)來定義你的對象的自定義事件。有兩種方法,但我只會顯示一個:

var DataListener = function() { 
    var fire = bob.event.namedEvent(this, 'received'); 
    this.start = function(count) { 
     for (var i = 0; i < count; i++) { 
      fire(i + 1); 
     } 
    }; 
}; 
var listener = new DataListener(); 
listener.add_received(function(data) { 
    console.log('data received: ' + data); 
}); 
listener.start(5); 
// Output: 
// data received: 1 
// data received: 2 
// data received: 3 
// data received: 4 
// data received: 5