36112


お世話になります。

①  
`var boxes = $('div');//複数のjQueryオブジェクト？`

②  
`var numbers = [1,3,4,6,8];//配列`

のふたつがある場合、  
それぞれの要素に対して処理する時は、

①の場合

[code]

    boxes.each(function(){})
    
[/code]

②の場合

[code]

    $.each(ary,function(){})
    
[/code]

と書くようにと、あるテキストに書いてあったのですが、  
①と②にはどのような違いがあるのですか？


CC BY-SA 3.0
2017-07-05T09:43:09.063
36109
2017-07-05T11:45:38.250
12297
question
javascript jquery
①var boxes = $('div'); ②var numbers = [1,3,4,6,8]; の違い


①は`$.fn.each`、②は`$.each`を利用しています

$.fn.each と $.each は似ているけれど、少し違う関数です  
$.fn.each は1引数(function)で、$.each は2引数(array, function)です  
eachできる値も異なります

[code]

    $('div').each(myFunction)
    ^^^^^^^^
    jQueryオブジェクトのみ
    
    $.each($('div'), myFunction)
           ^^^^^^^^
           jQueryオブジェクト or 配列
    
[/code]

jQueryオブジェクトにeachする場合、上の2つは必ず同じ結果になるのでどちらの記述をしても問題ありません  
①の記述の方が短く、jQueryオブジェクトを使っていることがわかりやすいので好まれています

配列にeachする場合、上の記述は使えませんので、必ず②の記述をする必要があります

* * *
[code]

    var $myDiv1    = new jQuery('div'); // $('div') と同じ
        ^^^^^^^          ^^^^^^
        インスタンス       クラス
    
    var $myDiv2    = new jQuery('div');
        ^^^^^^^          ^^^^^^
        インスタンス       クラス
    
[/code]

クラスを`new`するとインスタンスが生成されます  
クラスとインスタンスは異なるものなので、持っているメソッドも異なります

例えば  
「jQueryクラス」は html という名前のメソッドは持ちません  
(`typeof $.html === 'undefined'`)  
「jQueryインスタンス」は html という名前のメソッドを持っています  
(`typeof $('div').html === 'function'`)

今回は偶然「jQueryクラス」「jQueryインスタンス」 が両方 `each` という名前のメソッドを持っています

①は「jQueryインスタンス」のメソッド `each`  
②は「jQueryクラス」のメソッド `each`

です

一般に、jQueryクラス と jQueryインスタンス をあまり区別をせず、両方を指して「jQuery」と呼ぶこともあります  
なので、「①②のどちらもjQueryのメソッドですか?」という質問は少し答えにくいのですが、①②は異なるものに所属しているので「違う」と答えるのが一般的だと思います


CC BY-SA 3.0
2017-07-05T10:44:55.653
36112
2017-07-05T11:45:38.250
2017-07-05T11:45:38.250
9796
9796
36109
answer