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

10,826

Solution 1

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

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

Solution 2

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

Share:
10,826
Preslav Rachev
Author by

Preslav Rachev

Making the good old Web meet the new Web, one app at a time. A software engineer, entrepreneur, and educator. The tech mind behind http://murmel.social

Updated on August 24, 2022

Comments

  • Preslav Rachev
    Preslav Rachev over 1 year

    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