のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,853人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ+ JavaScript の質問用スレッド vol.138 +

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    552 : Name_Not - 2019/03/31(日) 20:53:45.79 ID:???.net (+7,-30,-213)
    $('.hoge').each(function(i, elem) {
    console.log(elem);
    });
    を、
    $('.hoge').each(function() {
    console.log(this);
    });
    と書けるのは、jQueryがelemをthisにバインドしてるからでしょ。
    アロー関数使ってこれは無理。
    $('.hoge').each(() => {
    console.log(this);
    });

    つまりjQueryバカ君は「this変えられるfunction最高!アローはクソ!」って言いたいんだねw
    553 : Name_Not - 2019/03/31(日) 21:03:38.59 ID:???.net (+3,-30,-121)
    >>552
    アロー関数を使う場合はこうな。

    $('.hoge').each((i, elem) => console.log(elem));

    ってか、アロー関数はthisをバインドしないんだから
    引数でやるしか無いでしょ?jQueryの問題じゃないよ。
    アロー関数使う以上、thisは関数の外のものが使われる
    554 : Name_Not - 2019/03/31(日) 21:05:11.90 ID:???.net (+0,-27,-34)
    jQueryはもちろんアロー関数と組み合わせて便利に使えます(当たり前)
    555 : Name_Not - 2019/03/31(日) 21:19:31.52 ID:???.net (+31,-30,+0)
    jQueryバカ君の主張まとめ:

    アロー関数で書く
    $('.hoge').each((i, elem) => {
    console.log(elem);
    });
    は、functionでも同じく
    $('.hoge').each(function(i, elem) {
    console.log(elem);
    });
    と書ける。
    しかしjQueryはわざわざelemをthisにバインドして
    $('.hoge').each(function() {
    console.log(this);
    });
    と書けるようにしている。
    これは全く無駄なことである。
    つまりjQueryは必要もないのにthis変えるアホである。
    そうではなく
    $('.hoge').each(function() {
    console.log(this);
    });
    と書けることに価値があるのであれば、
    $('.hoge').each(() => {
    console.log(this);
    });
    と書けないアロー関数はクソということになってしまうからだ。

    …と、こういうことか…
    556 : Name_Not - 2019/03/31(日) 21:21:12.05 ID:???.net (+54,+27,-1)
    >>555
    ぜんぜん違うよw
    557 : Name_Not - 2019/03/31(日) 21:25:19.40 ID:???.net (+64,+29,-35)
    >>551
    変わってないよ
    ただのfunctionなんだからグローバルになるのは仕様通りだし自然じゃん

    何から何に変わったと主張しているの?
    559 : Name_Not - 2019/03/31(日) 21:33:17.64 ID:???.net (+7,-30,-88)
    これも例の一つ。thisがクラス自身を指していない。

    class Foo {
     constructor(){
      this.value = 100;
     }
     foo() {
      console.log(this.value); // 100と表示される
      var ar = [1, 2, 3];
      ar.forEach(function() {
       console.log(this.value); // エラーになる
      })
     }
    }

    var f = new Foo();
    f.foo();
    560 : Name_Not - 2019/03/31(日) 21:36:03.76 ID:???.net (-1,-29,-26)
    しかも>>559の場合、forEachの中のthisはundefined。
    Global(Window)じゃない。
    使い方によってthisがコロコロ変わる
    562 : Name_Not - 2019/03/31(日) 21:42:45.57 ID:???.net (-26,-30,-97)
    >>561
    > ただaddEventListenerは引数の関数をDOM要素にバインドする関数だから
    > バインド先のDOM要素がthisになるってだけ

    じゃあ。

    my.foo(function() {
     // ここのthisはなんになる?
    }

    関数ごとにバラバラじゃないですか?

    関数ごとにバラバラであっていいっていうのが、
    JavaScriptの正しい仕様なんですか?
    565 : Name_Not - 2019/03/31(日) 22:21:54.26 ID:???.net (+3,-30,-110)
    >>563補足
    strictモードだと
    thisで返るのはグローバルではなくundefinedになる

    いずれにせよ、メソッドとして実行されていないので
    参照されても返すものがねえって意味で

    >>564補足
    function foo(){}

    は関数文

    var foo = function(){};
    bar.forEach(function(){});

    は関数リテラル
    なんで正確にはちょっと違うんだけど、まあ捨て置け
    566 : Name_Not - 2019/03/31(日) 22:24:15.51 ID:???.net (+51,+1,-33)
    >>562
    コールバック関数がthis束縛するはずない
    一度、コードを書いてみろ
    567 : Name_Not - 2019/03/31(日) 22:37:34.12 ID:rWRvnw+C.net (+27,+29,-36)
    >>561
    >んで、何のメンバでもない関数はどのスコープで作られようと
    >グローバルのメンバ扱いになる

    これはちょっと乱暴w
    568 : Name_Not - 2019/03/31(日) 22:37:49.34 ID:rWRvnw+C.net (+11,+13,+0)
    だった
    570 : Name_Not - 2019/04/01(月) 00:23:56.82 ID:???.net (+3,-29,-110)
    ようするに、DOM要素にaddEventListenerで登録した
    イベントハンドラの中でthisがDOM要素になっているのは、

    DOM要素が複数のイベントハンドラを呼び出す時に
    わざわざthisをDOM要素に変更して呼び出しているはずだ
    571 : Name_Not - 2019/04/01(月) 00:29:02.24 ID:???.net (+120,+8,-67)
    >>566
    そりゃそうよ。コールバック関数自体はどのオブジェクトにも
    紐付いてないのだからthis束縛はされていない

    addEventListerとかは、わざわざ自分の要素が
    thisになるようにしてからコールバック関数を呼び出している。
    572 : Name_Not - 2019/04/01(月) 00:55:47.10 ID:???.net (-1,-29,-10)
    関数をネストすると、内側のthis が、window になってしまう

    漏れは、そういう認識です
    574 : Name_Not - 2019/04/01(月) 01:44:17.16 ID:???.net (+21,-29,-30)
    >>573
    知ってるよ?addEventListenerは
    callとかapplyを使って、関数を呼び出す時に
    thisを変更してから呼び出してるよねって話をしてる
    575 : Name_Not - 2019/04/01(月) 06:07:30.29 ID:???.net (-1,-29,-36)
    グローバルのメンバ云々は全く関係なくて
    thisArgがundefinedのときsloppy modeではglobalThisに置き換えられてただけ
    576 : Name_Not - 2019/04/01(月) 06:41:07.52 ID:???.net (+102,+29,-19)
    >>571
    jQuery君がそれを理解してくれれば解決なんだがね
    577 : 568 - 2019/04/01(月) 08:10:47.92 ID:???.net (+103,+28,-16)
    >>576
    俺がそのjQuery君なわけだがw
    578 : Name_Not - 2019/04/01(月) 11:02:31.57 ID:???.net (+94,+29,-28)
    >>574
    アホか
    バインドするメソッドなんだからそうするに決まっとろうが
    579 : Name_Not - 2019/04/01(月) 12:30:27.39 ID:???.net (+112,+29,-1)
    >>577
    >>535もお前なら、>>571と矛盾してる
    580 : Name_Not - 2019/04/01(月) 13:01:46.00 ID:???.net (+70,+29,-71)
    >>578
    > バインドするメソッドなんだからそうするに決まっとろうが

    バインドするメソッドとは?
    それはどういう意味で、
    どこにそういう仕様であると書いてあるんですか?
    581 : Name_Not - 2019/04/01(月) 14:38:53.39 ID:???.net (+57,+29,-23)
    変なの湧いてるなあ
    なんか名前書いてよ
    興味のある人は読むし
    ない人はNGすっから
    582 : Name_Not - 2019/04/01(月) 14:52:34.84 ID:???.net (+57,+29,-4)
    まずは言い出しっぺが名前を書くように
    583 : Name_Not - 2019/04/01(月) 15:18:31.39 ID:???.net (+49,+26,-2)
    自覚あってワロタ
    584 : Name_Not - 2019/04/01(月) 15:19:53.04 ID:???.net (+4,-18,+1)
    じゃなくて名前。はよ
    585 : Name_Not - 2019/04/01(月) 15:38:30.56 ID:???.net (+57,+29,-65)
    "バインドするメソッド" で検索しても何も見つからんわ
    むしろ一番最初にjQueryでてきた
    オレオレ用語使ってないで、ちゃんと説明しろ
    587 : Name_Not - 2019/04/01(月) 19:36:34.49 ID:???.net (-7,-30,-30)
    589 : Name_Not - 2019/04/01(月) 20:41:20.75 ID:???.net (+56,+21,+0)
    >>535が敗れたか
    590 : Name_Not - 2019/04/01(月) 21:51:05.16 ID:???.net (+4,-18,-29)
    バインドするメソッドってなに?
    591 : Name_Not - 2019/04/01(月) 21:58:59.79 ID:???.net (+57,+29,-35)
    jQuery君は言葉狩りで話を逸らそうと必死だな
    592 : Name_Not - 2019/04/01(月) 23:04:20.22 ID:???.net (+94,+29,-74)
    言葉狩りじゃないなぁ

    理由が「バインドするメソッドなんだから」って
    書いてるんだから、その理由の意味を聞いてるわけ。

    それが答えられないなら、理由がないってことになる。
    593 : Name_Not - 2019/04/01(月) 23:08:44.94 ID:???.net (+75,+29,-8)
    偉そうなことは>>548>>579に反論出来てからいおうな
    594 : Name_Not - 2019/04/02(火) 01:14:19.26 ID:???.net (+75,+30,-74)
    >>592
    他意は無いんだが
    質問者が未解決のままレス続ける時は
    名前欄に最初の質問のレス番号入れてくれんかね
    文脈わからなくなるし
    混ざって他の質問者が流されたりしちゃうこともあるから

    あんまり口うるさくするのもアレなんだけど
    マナーっつうか
    みんなで使う掲示板なんで、ちょっとした気遣いみたいなもんで
    595 : Name_Not - 2019/04/02(火) 01:58:53.89 ID:???.net (-1,-29,-6)
    bind で、this を固定するのだろ
    596 : Name_Not - 2019/04/02(火) 05:36:12.19 ID:???.net (+73,+29,-116)
    おそらくaddEventListenerは要素に関数を紐付ける(バインド)のだから
    レシーバー(→this)が要素オブジェクトになると言いたかったんだろうが
    紐付けてるからそうなってるのではなくて
    紐づけてる風でもあるし、便利だからそうされてたのが
    デファクトとして今仕様になってると考えたほうが良いと思う
    何れにせよthisをどうしようが自由でそこに言語の縛りはないのだから
    597 : Name_Not - 2019/04/02(火) 08:45:37.87 ID:???.net (+57,+29,-28)
    いやjavascriptはthisをどうしようが勝手な言語だが他の一般的なクラスベースの言語はそんな自由じゃないだろ
    598 : Name_Not - 2019/04/02(火) 10:34:08.65 ID:???.net (+21,-21,-50)
    >>596
    うん、でもaddEventListenerは複数指定できるから
    要素に直接紐づけてるわけじゃないんだよね。

    便利だからわざわざthisを要素自身にして呼び出してる
    便利だから。jQueryも同じ。便利だからそうしている。
    599 : Name_Not - 2019/04/02(火) 12:31:14.19 ID:???.net (+9,-30,-211)
    つまり、
    $('.hoge').each(function(i, elem) {
    console.log(elem);
    });
    を、
    $('.hoge').each(function() {
    console.log(this);
    });
    と書けるようにしてるから便利という意見ですよね。
    つまり、
    $('.hoge').each((i, elem) => {
    console.log(elem);
    });
    としか書けない、
    $('.hoge').each(() => {
    console.log(this);
    });
    とは書けないアロー関数はクソ、thisを自由に変えられるfunction最高という意見ですねw
    600 : Name_Not - 2019/04/02(火) 12:42:52.91 ID:???.net (+10,-30,-111)
    >>599
    thisが変わってほしい時は、function、
    thisを変えたくない時は、アロー関数
    使い分ければ良いんだよ

    所でさ、
    1. thisが要素になる・・・使いやすくするため
    2. thisが変わらない(つまりアロー関数)・・・関数の外のthisを使える

    この2つにメリットが有るのは分かるんだが

    3. thisがGlobal(Window)に変わる。(ただし"use strict"の場合はundefined)

    この仕様にメリットってなにかある?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について