jquery如何覆盖类方法?

时间:2012-05-12 10:20:49

标签: jquery override extend

看起来这个问题很受欢迎,但没有jQuery版本。

我有两个类,第二个类从第一个扩展。

扩展方法is copied from here

function UIButton(o){
    if (typeof(o) != 'undefined') $.extend(true, this, o); 
    this.setOutput=function(divname){
      alert("first");
    }
}

function UIButton2(o) {
    if (typeof(o) != 'undefined') $.extend(true, this, o);
    this.setOutput=function(divname) {
        alert("second");
    }
    return new UIButton(this);
}

根据the jquery documentation

第二个对象的方法应该使用$.extend()覆盖第一个对象的方法(具有相同的名称)。

但是我在html中检查它,发现第一个对象的功能仍然很好用。 (Alert“first”...)这使得它的子类无法覆盖该函数。

所以我想问一下,这是怎么发生的以及如何解决它。我想提醒“第二次”......

2 个答案:

答案 0 :(得分:1)

首先扩展,然后设置新的setOutput,以便覆盖扩展方法)。

如果您更改订单,它将起作用..

function UIButton(o){
    this.setOutput=function(divname){
      alert("first");
    }
    if (typeof(o) != 'undefined') $.extend(true, this, o); 
}

function UIButton2(o) {
    this.setOutput=function(divname) {
        alert("second");
    }

    if (typeof(o) != 'undefined') $.extend(true, this, o);
    return new UIButton(this);
}

仅在此示例的UIButton中需要,但我将其添加到两者以供将来使用

http://jsfiddle.net/gaby/R26ec/

演示

答案 1 :(得分:0)

您可以使用jQuery代理方法来覆盖类 参考:http://api.jquery.com/Types/#Context.2C_Call_and_Apply

例如

glGet