Building up function by function
by uedatakuya
JavaScript
function argumentsToArray(argObj) {
var args = [];
Object.keys(argObj).forEach(function(i){
args.push(argObj[i]);
});
return args;
}
function expandable(fnc) {
if (typeof fnc !== "function") {
fnc = function(){};
}
var that = function() {
var args = argumentsToArray(arguments);
fnc.apply(that, args);
};
that.expand = function(newFunc) {
var f = fnc;
fnc = function() {
var args = argumentsToArray(arguments);
f.apply(that, args);
newFunc.apply(that, args);
};
return that;
};
return that;
}
var foo1 = expandable(function(x) {
console.log(x);
});
foo1(1);
foo1.expand(function(x) {
console.log(x+1);
});
foo1(1);
foo1.expand(function(x) {
console.log(x+2);
});
foo1(1);