0

この質問は人気があるようですが、jQuery のバージョンはありません。

私は2つのクラスを持っています.2番目は最初のものから拡張されています.

拡張メソッドは 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);
}

jqueryのドキュメントによると

2 番目のオブジェクトのメソッドは、 を使用して最初のオブジェクトのメソッド (同じ名前) をオーバーライドする必要があります$.extend()

ただし、html で確認したところ、最初のオブジェクトの機能がまだ正常に機能していることがわかりました。(Alert "first"...) これにより、そのサブクラスは関数をオーバーライドできなくなります。

そこで、これがどのように発生し、どのように解決するかをお聞きしたいと思います。「秒」でアラートしたい……

4

2 に答える 2

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/でのデモ

于 2012-05-12T10:38:40.713 に答える
0

jQuery プロキシ メソッドを使用してクラス Ref をオーバーライドできます: http://api.jquery.com/Types/#Context.2C_Call_and_Apply

例えば

(function() {
   // log all calls to setArray
   var proxied = jQuery.fn.setArray;
   jQuery.fn.setArray = function() {
   console.log( this, arguments );
   return proxied.apply( this, arguments );
  };
})();
于 2016-04-24T17:52:09.490 に答える