Preslav Rachev
Preslav Rachev

Reputation: 4003

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

Upvotes: 5

Views: 11009

Answers (2)

Barbara Jacob
Barbara Jacob

Reputation: 286

I am really late to the party, but _.defaults is what you were looking for.

Upvotes: 17

biziclop
biziclop

Reputation: 14596

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

_.extend( this, comp, { initialize:this.initialize });

Upvotes: 17

Related Questions