Продлить без переопределения
-
27-10-2019 - |
Вопрос
Я в некотором роде, чтобы создать соединение между Xui & Backbone, но я столкнулся с проблемой в своем дизайне. Наверное.
Вот это. Я хочу расширить XUI с помощью метода вызова attr
который сможет справиться с хэшем attributes/values
. Анкет JQuery делает, и магистраль использует это. Вот почему я хочу это сделать.
Несчастный, уже есть attr
Метод в XUI. Итак, когда я делаю:
xui.extend({
attr: function (attributes) {
if (typeof attributes == "object") {
for (var attr in attributes) {
this.attr(attr, attributes[attr]);
}
};
}
});
Конечно, у прото Сюй есть только один метод ATTR. Мой. Как мне двое?
Что -то, что делает следующее, доступно:
xui(element).attr('attr', 'value');
xui(element).attr({'attr': 'value', 'foo': 'bar'});
Спасибо за чтение и помощь :)
Решение
Вам необходимо сохранить ссылку на исходную функцию, а затем посмотреть на аргументы, которые вызывается функция, чтобы определить погоду, которую вы должны вызвать собственной версией или оригинал.
Что -то подобное (не тестируемый код, поэтому используйте только для вдохновения):
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 */
}
};