Javascript 无覆盖扩展

Javascript 无覆盖扩展,javascript,backbone.js,xui,Javascript,Backbone.js,Xui,我在某种程度上使XUI和主干网兼容,但我在设计中遇到了一个问题。我想是吧 就在那里。我想用方法调用attr来扩展XUI,该方法能够处理属性/值的散列。jQuery可以,主干网可以利用它。这就是为什么我要这么做 不幸的是,XUI中已经有了attr方法。因此,当我这样做时: xui.extend({ attr: function (attributes) { if (typeof attributes == "object") { for (var attr in att

我在某种程度上使XUI和主干网兼容,但我在设计中遇到了一个问题。我想是吧

就在那里。我想用方法调用
attr
来扩展XUI,该方法能够处理
属性/值的散列。jQuery可以,主干网可以利用它。这就是为什么我要这么做

不幸的是,XUI中已经有了
attr
方法。因此,当我这样做时:

xui.extend({
  attr:   function (attributes) {
    if (typeof attributes == "object") {
      for (var attr in attributes) {
        this.attr(attr, attributes[attr]);
      }
    };
  }
});
当然,XUI的原型只有一个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 */
  }
};