Estendere senza sovraccarico
-
27-10-2019 - |
Domanda
Sono in un modo per fare un compaità tra Xui e Backbone, ma ho incontrato un problema nel mio design. Credo.
Eccolo. Voglio estendere Xui con una chiamata del metodo attr
che sarebbe in grado di affrontare un hash di attributes/values
. JQuery lo fa e la spina dorsale lo sfrutta. È per questo che voglio farlo.
Sfortunato, c'è già un attr
Metodo in Xui. Quindi, quando lo faccio:
xui.extend({
attr: function (attributes) {
if (typeof attributes == "object") {
for (var attr in attributes) {
this.attr(attr, attributes[attr]);
}
};
}
});
Naturalmente, il Proto di Xui ha solo un metodo ATRT. Il mio. Come posso averne due?
Qualcosa che sta seguendo a disposizione:
xui(element).attr('attr', 'value');
xui(element).attr({'attr': 'value', 'foo': 'bar'});
Grazie per aver letto e aiutato :)
Soluzione
È necessario salvare un riferimento alla funzione originale, quindi guardare gli argomenti con cui viene chiamata la funzione per determinare il tempo che dovresti chiamare la tua versione o l'originale.
Qualcosa di simile a questo (codice non testato, quindi usa solo per l'ispirazione):
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 */
}
};