2

これら2種類の拡張機能の違いを教えてもらえますか?ありがとう。

$.fn.alertWhileClick= function() {
   alert($(this).val());
}


$.fn.extend({
    alertWhileClick:function(){
      alert($(this).val());
    }
});  
4

1 に答える 1

1

2つの形式は同等です。1つ目は、割り当てを介してjQueryのプロトタイプにメソッドを追加し、2つ目は、$。extend()$.fn.extend()と同じメソッドであるへの呼び出しを介してメソッドを追加します。

ドキュメントには、次のように書かれているため、実際には少し誤解を招く可能性があります。

に引数が1つだけ指定されている場合$.extend()、これはターゲット引数が省略されたことを意味します。この場合、jQueryオブジェクト自体がターゲットであると見なされます。

しかし、実際に起こることは、次のようなものです。

に引数が1つだけ指定されている場合$.extend()、これはターゲット引数が省略されたことを意味します。この場合、オブジェクト$.extend()が適用されます(つまりthis、メソッド内にバインドされたオブジェクト)がターゲットであると見なされます。

したがって、単一の引数を使用して呼び出すと、$.extend()が拡張され、単一の引数を使用して$呼び出す$.fn.extend()と、が拡張され$.fnます。

ソースコードの関連部分は次のように述べています。

jQuery.extend = jQuery.fn.extend = function() {

    // [...]

    // extend jQuery itself if only one argument is passed
    if ( length === i ) {
        target = this;  // Note: 'this', not 'jQuery'.
        --i;
    }

    // [...]
};
于 2013-02-27T14:43:01.073 に答える