0

ページ上の各オブジェクトで使用できる関数をどのようにアタッチできるのでしょうか。私はこのようにそれを行うことができることを知っています:

mything = {
    init: function(SELECTOR){

    },
    destroy: function(){

    }
};

しかし、それは私にはこの方法でのみ利用可能です:mything.init(SELECTOR);

私が望んでいるのは、この方法で同じことができるようにすることです。

$('.mydiv, input, whatever').myFunction({ 'my' : 'arg', 'my2' : 'arg2' });
$('.mydiv').myFunction('destroy');

Javascriptチュートリアルがたくさんあることは知っていますが、このタイプの機能を検索する方法がわかりません。どんな助けでもいただければ幸いです!

4

3 に答える 3

4

あなたの場合、を拡張するだけで十分なようですjQuery.prototype

jQuery.extend( jQuery.fn, mything );

ただし、もちろん、あまりお勧めできなくても、その究極のルートに移動してを拡張することは可能Object.prototypeです。これにより、これらの関数がすべてのオブジェクトに実際に追加されます。

于 2013-01-30T09:39:17.430 に答える
2

これは必ずしも素晴らしいアイデアではありませんが(ひどいアイデアです)、プロトタイプを使用してこれを実現できます。

Object.prototype.myFunction = function() {
  console.log('Called myFunction');
};

そして、任意のオブジェクトに対して何が起こるかを見ることができます。

document.myFunction();

自分以外のクラス(特に、自分以外のライブラリに属する​​組み込みオブジェクトまたはクラス)のプロトタイプに追加すると、多くの混乱が生じる可能性があることに注意してください。これが、Google独自のスタイルガイドがこれに反対することを推奨する理由の1つです(String.startsWith、String.endsWith、およびその他の多くの便利な操作を組み込み型に追加したいという誘惑にも関わらず)。

于 2013-01-30T09:39:22.557 に答える
1

あなたが説明することを行うためのクリーンな方法は、jQueryプラグイン内にコードをラップすることです。

これが公式のjqueryプラグインガイドです。それを読んでください、それは実際に理解するのは非常に簡単です。

関数のラッピング($(selector).myFunction()呼び出しinit$(selector).myFunction('doThis')呼び出しdoThisなど)に関する部分はここにあります。

于 2013-01-30T09:45:39.957 に答える