Javascript delaying

Posted by m6w6 on 18th March 2011 in Mike's sudden inspirations: WEB

In need of executing Javascript after the page has loaded, or something else has been initialized I came up with a simple but useful tiny “Delayer”:

/**  
 * @param handler a callback accepting Delayer.dispatch as argument  
 */  
function Delayer(handler) {  
    var self = this;  
  
    this.dispatch = function() {  
        for (var i = 0; i < self.length; ++i) {  
            console.log("running delayed init "+i+": "+self[i]);  
            self[i]();  
        }  
    };  
  
    if (typeof handler == "function" || handler instanceof Function) {  
        handler(this.dispatch);  
    }  
}  
  
Delayer.prototype = Array.prototype;

It can be initialized the following way:

/* e.g. with jQuery */  
window.delayedInits = new Delayer($(document).ready);  
/* e.g. with Facebook */  
window.fbDelayedInits = new Delayer(function(dp){window.fbAsyncInit = dp;});

Then you push your work the usual way:

delayedInits.push(function() {alert("Hello, delayed!");});