2013-07-30 10 views
10

は、私はこのような関数を定義する方法を理解この関数定義の意義は何ですか?</p> <pre><code>function myfunc(x,y,z) { alert("Just an example " + x + y + z) } </code></pre> <p>ではなく、この:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

    <script> 
     (function ($) { 
     $.fn.idle = function (x, y, z) { 
      alert("Just an example " + x + y + z) 
    }(jQuery)); 
    </script> 

上記を私が使用しているライブラリの一部であるが、私は単純に理解することはできません$.fn.idleビット。

は何をしていますか?それは何とか「アイドル」と呼ばれる関数を定義していますが、$.fnはどうですか? (function ($) {の部分はどうですか?再び、私は$(document).ready(function() {を理解しますが、(function ($) {は完全にエイリアンです。それは短い手ですか?

(jQuery));の意味は何ですか?

+4

これは、jQueryプラグインの定義方法です。 –

+1

[なぜ匿名関数を定義し、引数としてjQueryを渡すのですか?](http://stackoverflow.com/q/10371539/1420197) –

+0

http://stackoverflow.com/questions/2716069/how-does- this-javascript-jquery-syntax-work-function-window-undefined –

答えて

8

そのスコープ内部$jQueryをエイリアスどのimmediately invoked function expression

(function($) {}(jQuery)); 

直ちに関数を作成して実行します。このようにして、関数内で$を使用して、$が参照するものに関係なくjQueryを参照できます。 jQuery.noConflict()を使用しているページに便利です。また、そのIIFEの中で宣言された変数は、グローバルスコープに漏れません。質問、$.fn === jQuery.prototypeの他の部分については


。そのため、jQueryプロトタイプにメソッドを追加することで、jQueryオブジェクト上でメソッドを呼び出すことができます。例:

$.fn.doSomething = function(){}; //add a method to the jQuery prototype 
$('selector').doSomething(); //then you may call it on any jQuery object 

詳細はjQuery plugin authoringです。

+0

プロトタイプを参照する理由は何ですか? – Virus721

+0

ああ、ちょうど私のウェブソケットが夜間に壊れていることに気づいた。 @ Virus721どういう意味なのかよく分からない。 'jQuery.fn'は、' jQuery.prototype'へのショートカット(参照)です。これらのいずれかを使用することができます。 '=]' –

+0

@ Virus721はfnがプロトタイプよりも7文字短いためですか?知りません。 –

1

これはIIFE - Immediately Invoked Function Expressionと呼ばれます。

(function ($) { 
    // inside stuff 
}(jQuery)); 

jQuery$として機能本体にインポートされ、機能がすぐに実行されます。

// inside stuff 

$.fn.idle = function (x, y, z) { 
    alert("Just an example " + x + y + z) 
} // added in missing parentheses 

$.fnjQuery.fnに相当し、jQuery.fn.idleは単に機能を指すjQuery.fnのプロパティです。

もう1つ興味深い点は、jQuery.fnjQuery.prototypeの別名であることです。つまり、同じものです。

多くのエイリアスは、コードが実際よりも少し複雑になります。

これは、プラグイン/ミックスインをライブラリに追加するのに共通の構造です。

希望、私はあなたのためにこれをカットします。

1

$.fnに関数を追加すると、それらをjQueryオブジェクトで使用できるようになります。これは、関数を変数に代入され

$.fn.alertTitle = function() { alert($(this).attr('title')); }; 
$('#foo').alertTitle(); 
1

:それは名前を持っていないため、変数に代入

var test = function() { alert('testing'); } 
test(); // will alert testing 

機能は「無名関数」と呼ばれ、多くの場合に使用されています関数を別の関数にパラメータとして渡します。

javascriptでは、変数は$で始まり、これはjQueryによって使用されます。 jQueryは、プロパティを持つオブジェクトで、そのうちの1つはfnです。このプロパティはプロパティを持つこともできます(この場合はidle)。

ので$.fn.idle = function() {};がダウンし、これに来る:

$ = { 
    fn: { 
     idle: function() {} 
    } 
}; 

ことがaswell他のニュアンスを持つことができますが、これはまた、「名前空間」と呼ばれます。 既存のオブジェクトにのみプロパティを割り当てることができることにも注意してください。

var myVar = {}; 
myVar.test.foo = {}; // results in error because myVar.test is undefined 
myVar.test = { 
    foo: {} 
}; // this is correct 
関連する問題

 関連する問題