2012-03-20 9 views

答えて

5

$()に渡すクロージャ(関数)内の関数を定義するだけでは、jQuery fnオブジェクトに配置するための操作は何も実行されません。これを行うには、明示的にそれをしなければならない。

$.fn.someFunc = someFunc; 

通常、$()にコールバックの中にこれをしないでしょう、あなたは以前にそれを行うだろう。プラグインはこれを実行して機能を追加します。これはすでにより前にDOMが用意されているはずです。 |

jQuery(function($) { 

    $(".foo").green(); 

}); 

Live example:あなたは準備ができてDOMから使用することがあります

(function($) { 
    $.fn.green = green; 
    function green() { 
    return this.css("color", "green"); 
    } 
})(jQuery); 

...:一例として

は、ここに他愛ないプラグインで、緑色のテキストに変わりますLive source

$.fnから直接ではなく、jQueryインスタンスからの呼び出しであることに注意してください。

+0

簡単な説明をありがとう。 – zhihong

1

someFuncは "jQuery関数"ではなく、(jQuery)DOMContentLoadedイベントハンドラ内で定義された関数です。

範囲外であるため、外部からアクセスすることはできません。ただ、負荷ハンドラの外にそれを宣言し、それがアクセスできるようになります:

$(function(){ 
    // nothing here , but you can call someFunc() if you want 
}); 

function someFunc(){ 
    /*do something*/ 
}; 

function test(){  
    someFunc(); // works! 
} 
1

をjqueryのでは

$.fn.someFunc = myFunc; 
function myFunc() 
{ 
    // Code here 
} 

無地のJavaScriptの

function myObj() 
{ 
    // Code here 
} 
var obj= new myObj(); 
obj.prototype.someFunc=myFunc; 
function myFunc() 
{ 
    // Code here 
} 

に似ているそれは、新しいを追加するだけの方法ですプロパティをオブジェクト(プロトタイプの継承)に、jqueryのfnはjavascriptのプロトタイプのエイリアスに過ぎません。私は

$.fn.someFunc = myFunc; 

を使用して、以前のjQueryオブジェクトにで追加した私の「sumFunc」メソッドを呼び出すには、私は

$('someElement').someFunc(); 

を行うことができますし、この行は(taht関数を呼び出すと「someElement」に何かを行います私は何もしませんでしたが)、それが十分明確であることを望みます。 T.J.を見てください。 Crowderの答え、それはあなたにいくつかのより多くの理解を与えるでしょう。

+0

* "... jqueryのfnはjavascriptのプロトタイプの別名です..." *あなたは 'jQuery 'を意味します。prototype'(jQueryはインスタンスを作成するために 'new jQuery.fn.init'を使用するため、' jQuery.fn.init.prototype'から参照されることも奇妙です)。 –

+0

はい、これを見てくださいhttp://stackoverflow.com/questions/1755080/why-jquery-do-this-jquery-fn-init-prototype-jquery-fn、私は私の理解に間違っていますか? –

+0

'@Sheikh Heera':私はあなたの質問を理解していません。すべてのリンクは、私が上記のことを繰り返す(不完全に)。 "javascript"!= "jquery"に注意してください。 –

関連する問題