2011-11-10 8 views
0

私はjQuery pluginsの記事について読んでいますが、それを使用する他のライブラリと衝突しないように、ドル記号表記を保存する方法について説明しています。jQueryのオーサリングとクロージャ

それは言う:

それがスコープ内の別のライブラリによって を上書きすることができないので、ドル記号にマップし、自己実行機能 (クロージャ)へのjQueryを渡すためのベストプラクティスですここではその実行

の彼らはそれを行う方法です。

(function($) { 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

私はunderstしようとしています彼らが何を言っているのか、そしてこのコードが言っていること。次のコードはどのように評価されますか?

function($){}が実行され、jQueryオブジェクトが渡されますか?

jQueryオブジェクトは$になりますか?

+0

いいえ、単なるパラメータです。 –

答えて

2

はい。 function($) { ... }は、jQueryオブジェクトが渡されて実行されます。 $引数は、親スコープ(存在する場合)の$変数を隠し、jQuery変数の値を与えますが、そのコードブロックに対してのみです。

これをしたいと思う理由は$が別のライブラリ(たとえば、Prototype)で使用することができるですが、あなたはまだあなたのプラグイン内jQueryため$速記を使用することができるようにしたいです。 $の引数をとり、その引数にjQueryを指定して関数を作成すると、ではなくjQueryを使用することができます。$はPrototypeで使用されている関数を上書きしません。

2

のように書くことができます。すべてのjQueryのfn.myPluginプロパティに関数を追加します

function add_my_plugin_to_fn($) { 
    $.fn.myPlugin = function() { 
    } 
} 

add_my_plugin_to_fn(jQuery); 

または

//window.jQuery = stuff; // in jquery initializer 
function add_my_plugin_to_fn(any_object_with_fn_property) { 
     any_object_with_fn_property.fn.myPlugin = function() { 
     } 
    } 

    add_my_plugin_to_fn(jQuery); 

に。 $を使用する唯一の理由は、jQueryの人々は関数名として一文字「$」を使用するのが好きであるためです。ちょうど容易にjQuery.fn.mypluginまたはjq.fn.mypluginまたは_.fn.mypluginとすることができます。このような何かが起こる場所

これは、あなたが状況から抜け出すことができます

my_awesome_javascipt_.js 
    function $(add_to_this) { 
     return add_to_this + 1; 
    } 


jQuery.js 

    window.jQuery = //all the jquery stuff 
    //sees that window.$ already has a function in it and leaves it alone 


my_jquery_plugin.js 
    $.fn.myplugin; //this doesn't exist because $ is a function from the first file 
    //you should have used jQuery.fn.myplugin. But that is a lot to type out. Doing the 

すぐに呼出し機能のトリックは、ファイルのスコープを持つ変数「$」を強制します。

はい、言語は本当にそれを行う必要があります。これはデフォルトでグローバルになるのはちょっとした愚かな仕組みです。何かを修正する必要がある場合は、をご覧ください。多くの基本的なエラーがなくてもJavaScriptを書くのに役立ちます。

関連する問題