2012-02-13 12 views
5

アンダースコアのextend関数を使用して、特定のケースを実装したいと考えています。既定では、extendは、送信先の既存のメンバーを送信元のメンバーで上書きします。これで私の問題は、私は宛先と送信元そのまま両方のinitializeメソッドを維持したいということですので、私がやったことは大体た:宛先のメンバーの一部を上書きせずにアンダースコアの_.extend(...)を使用する

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; 
} 

これはそれを行うための適切な方法です - 取り外しと再接続で?つまり、私はアンダースコアをそのまま残しておきたいと思います。これは非常に特殊なケースであるため、どの方法でも拡張したくありません。

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

答えて

16

だけで簡単にアイデアを見つけてください、_.extendは、複数のソースを受け入れることができます。

+0

ohh ..それはクールなものです – preslavrachev

17

私はパーティーに本当に後半ですが、_.defaultsは、あなたが探していたものです:あなたは、潜在的な

+0

_defaultsは1つのレベルでしかできません。 {a:{b: "XYZ"}}や{a:{c: "TTT"}}のようなものなら、動作しません。マルチレベルのデフォルトはありますか? – murvinlai

+1

@murvinlaiはい、$。拡張。 – pilau

関連する問題