This is the formatted code.
function extend(obj, id) {
obj.toObject = (function(toObject) {
return function() {
return fabric.util.object.extend(toObject.call(this), {id: id});
};
})(obj.toObject);
}
Now lets simplify it..
Core method
fabric.util.object.extend(toObject.call(this), {id: id}); //some fabric lib specific method
Now,
function extend(obj, id) {
obj.toObject = (somefunction(toObject))(obj.toObject);
}
An IIFE expression which executes when obj.toObject is initiated.obj.toObject object is passed to somefunction()
Now this IIFE is returning an closure.
return fabric.util.object.extend(toObject.call(this), {id: id});.
So basically your function will assigntoObject function to any object passed to extend