4

私はいくつかのjqueryプラグインをコーディングしています.これらを拡張しましたが、理由はわかりません:

方法 1

(function($){
    $.fn.myplugin = function() {}
})(jQuery);

$.extend({myplugin : $.fn.myplugin});

方法 2

(function($){
    $.extend({
        myplugin: function() {}
    })
})(jQuery);

#1 では、$.myplugin().myplugin2().myplugin3(); を呼び出します。

ただし、#2 では $.myplugin().myplugin2(); は使用できません。myplugin2 が有効な関数ではないことを示しています


基本的には宣言しなくていいので#2に書きたい

$.extend({
    myplugin : $.fn.myplugin,
    myplugin2 : $.fn.myplugin2,
    .....});

プラグインごとに。誰でも私を助けることができますか?

4

2 に答える 2

1

どちらの場合も、関数をグローバルjQueryオブジェクトに追加します。これにより、を呼び出すことができます$.pluginName

$#1は、関数を呼び出すときに取得するすべてのjQuery要素オブジェクトにもプラグインを追加します$("#selector")

プラグインはおそらくjQuery要素オブジェクトを返します。したがって、最初にを使用$.pluginNameし、次のコードでを呼び出します$.fn.pluginName$.fn.pluginNameは未定義であるため、#2で呼び出しを連鎖させることはできません。

$.fnこれは、がのエイリアスであることがわかっている場合に、より意味があります$.prototype。(プロトタイプ関数は、バックグラウンドでキーワード$()を使用して、-のすべての戻り値のメンバーです。)new


コードを単純化するために、すべてのプラグインを使用してオブジェクトを作成できます。

var plugins = {
    myPlugin: function(){},
    myPlugin2: function(){}
}

$.extend($, plugins);
$.extend($.fn, plugins);
于 2013-02-06T16:22:39.890 に答える
1

$.fn.myplugin = function() {}次のように、jquery オブジェクトで関数を呼び出すことができます。

$("something").myplugin()

一方

$.extend({
    myplugin: function() {}
})

次のように関数を呼び出すようにします。

$.myplugin()

最初の例では、これらの両方を行っています。2枚目は2枚目しかやってない。

于 2013-02-06T16:23:48.403 に答える