delegate function calling.

by techsin

JavaScript

(function(){Object.defineProperty(window,"log",{set:function(a){console.log(a)}})})();

A(D(C));
B(D(C));

function D() {
    var x = window.funcsToCall= window.funcsToCall || {};
    var f=arguments[0],n=f.name;
    log = x.hasOwnProperty(n);
    (!x.hasOwnProperty(n))?x[n]=0:x[n]++;
    log = x[n];
    return function(){
       (x[n]==0)?(f(),delete x[n]):x[n]--;
    }
}

NOT REALLY TRUE AS FUNCTION CALLING DO NEED TO CALL FUNCTION K SO THEY HAVE CALLBACK

function C(){console.log('hey');}
function A(k){setTimeout(function(){log='timeoutA';k();},1);}
function B(k){setTimeout(function(){log='timeoutB';k();},3000);}

//delay simulated using timeouts...