Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using underscore's _.extend(...) without overriding some of the destination's members

I would like to be able to use underscore's extend function and implement a specific case. By default, extend overrides any existing member of the destination with that of the source. My problem with this is that I want to keep the initialize method of both the destination and the source intact, so what I did was roughly:

addComponent: function(comp, init) {
   var iF;
   if (comp.initialize) {
       iF = comp.initialize;
       delete comp["initialize"];
   }

   _.extend(this,comp);

   if (iF) {
       comp.initialize = iF;
       comp.initialize.call(this,init);
   }

   return this;
}

Is this the proper way to do it - by detaching and reattaching? I mean, I want to keep underscore intact, and I don't want to extend it with any methods, because this is a very specific case. Do you spot any potential

like image 647
Preslav Rachev Avatar asked Feb 13 '12 07:02

Preslav Rachev


1 Answers

Just a quick idea, _.extend can accept multiple sources:

_.extend( this, comp, { initialize:this.initialize });
like image 141
biziclop Avatar answered Nov 15 '22 03:11

biziclop