2011-10-20 5 views
3

私はXUI &の間で互換性を確認する方法ですが、私のデザインで問題が発生しました。私は推測する。オーバライドなし延長

あります。私はattributes/valuesのハッシュを扱うことができるメソッド呼び出しattrでXUIを拡張したいと思います。 jQueryはそれを行い、Backboneはそれを悪用します。それが私がこれをしたい理由です。

XUIには既にattrメソッドがあります。だから私がするとき:

xui.extend({ 
    attr: function (attributes) { 
    if (typeof attributes == "object") { 
     for (var attr in attributes) { 
     this.attr(attr, attributes[attr]); 
     } 
    }; 
    } 
}); 

もちろん、XUIのprotoはただ1つのattrメソッドを持っています。鉱山。どうすれば2つにすることができますか?

利用でき、次のやって何か:読書のための

xui(element).attr('attr', 'value'); 
xui(element).attr({'attr': 'value', 'foo': 'bar'}); 

おかげで、あなたは元の関数への参照を保存してから、関数が呼び出されたので引数を見てする必要があります:)

答えて

3

を支援あなた自身のバージョンまたはオリジナルと呼ぶべき天気を決定する。

このような何か(テストされていないコード、これだけのインスピレーションのために使用します):

var originalAttr = xui.attr; 

xui.attr = function() { 
    if(typeof arguments[0] === 'string') { 
    originalAttr.apply(this, arguments); 
    } 
    else if(typeof arguments[0] === 'object') { 
    for (var attr in attributes) { 
     originalAttr.call(this, attr, attributes[attr]); 
    } 
    } 
    else { 
    /* unsupported arguments */ 
    } 
}; 
+0

どうもありがとう!私はそれをポストした後少し考えました。私の単体テストが2回に1回働いていても、それは仕事になります。 –