Ohne Überschreibung ausdehnen
-
27-10-2019 - |
Frage
Ich bin auf eine Weise, um COPT zwischen Xui & Backbone zu machen, aber ich habe ein Problem in meinem Design getroffen. Ich vermute.
Da ist es. Ich möchte XUI mit einem Methodenaufruf erweitern attr
was in der Lage wäre, mit einem Hash von zu handhaben attributes/values
. JQuery macht es und Backbone nutzt es aus. Deshalb möchte ich das tun.
Pech, es gibt bereits eine attr
Methode in Xui. Also, wenn ich es tue:
xui.extend({
attr: function (attributes) {
if (typeof attributes == "object") {
for (var attr in attributes) {
this.attr(attr, attributes[attr]);
}
};
}
});
Natürlich hat das Proto von Xui nur eine Attr -Methode. Mine. Wie kann ich zwei haben?
Etwas, das folgt: verfügbar:
xui(element).attr('attr', 'value');
xui(element).attr({'attr': 'value', 'foo': 'bar'});
Danke fürs Lesen und Hilfe :)
Lösung
Sie müssen einen Verweis auf die ursprüngliche Funktion speichern und dann die Argumente ansehen, die die Funktion aufgerufen wird, um das Wetter zu bestimmen, das Sie Ihre eigene Version oder das Original nennen sollten.
So etwas (nicht getesteter Code, also nur zur Inspiration verwenden):
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 */
}
};