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

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

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

    $('.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 = :

    >>552
    アロー関数を使う場合はこうな。

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

    ってか、アロー関数はthisをバインドしないんだから
    引数でやるしか無いでしょ?jQueryの問題じゃないよ。
    アロー関数使う以上、thisは関数の外のものが使われる

    554 = :

    jQueryはもちろんアロー関数と組み合わせて便利に使えます(当たり前)

    555 = :

    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 = :

    >>555
    ぜんぜん違うよw

    557 = :

    >>551
    変わってないよ
    ただのfunctionなんだからグローバルになるのは仕様通りだし自然じゃん

    何から何に変わったと主張しているの?

    559 = :

    これも例の一つ。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();

    565 = :

    >>563補足
    strictモードだと
    thisで返るのはグローバルではなくundefinedになる

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

    >>564補足
    function foo(){}

    は関数文

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

    は関数リテラル
    なんで正確にはちょっと違うんだけど、まあ捨て置け

    566 = :

    >>562
    コールバック関数がthis束縛するはずない
    一度、コードを書いてみろ

    567 :

    >>561
    >んで、何のメンバでもない関数はどのスコープで作られようと
    >グローバルのメンバ扱いになる

    これはちょっと乱暴w

    568 = 567 :

    だった

    570 = :

    ようするに、DOM要素にaddEventListenerで登録した
    イベントハンドラの中でthisがDOM要素になっているのは、

    DOM要素が複数のイベントハンドラを呼び出す時に
    わざわざthisをDOM要素に変更して呼び出しているはずだ

    571 = :

    >>566
    そりゃそうよ。コールバック関数自体はどのオブジェクトにも
    紐付いてないのだからthis束縛はされていない

    addEventListerとかは、わざわざ自分の要素が
    thisになるようにしてからコールバック関数を呼び出している。

    574 = :

    >>573
    知ってるよ?addEventListenerは
    callとかapplyを使って、関数を呼び出す時に
    thisを変更してから呼び出してるよねって話をしてる

    576 = :

    >>571
    jQuery君がそれを理解してくれれば解決なんだがね

    577 = :

    >>576
    俺がそのjQuery君なわけだがw

    578 = :

    >>574
    アホか
    バインドするメソッドなんだからそうするに決まっとろうが

    579 = :

    >>577
    >>535もお前なら、>>571と矛盾してる

    580 = :

    >>578
    > バインドするメソッドなんだからそうするに決まっとろうが

    バインドするメソッドとは?
    それはどういう意味で、
    どこにそういう仕様であると書いてあるんですか?

    581 = :

    変なの湧いてるなあ
    なんか名前書いてよ
    興味のある人は読むし
    ない人はNGすっから

    582 = :

    まずは言い出しっぺが名前を書くように

    583 = :

    自覚あってワロタ

    584 = :

    じゃなくて名前。はよ

    585 = :

    "バインドするメソッド" で検索しても何も見つからんわ
    むしろ一番最初にjQueryでてきた
    オレオレ用語使ってないで、ちゃんと説明しろ

    589 = :

    >>535が敗れたか

    590 = :

    バインドするメソッドってなに?

    591 = :

    jQuery君は言葉狩りで話を逸らそうと必死だな

    592 = :

    言葉狩りじゃないなぁ

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

    それが答えられないなら、理由がないってことになる。

    593 = :

    偉そうなことは>>548>>579に反論出来てからいおうな

    594 = :

    >>592
    他意は無いんだが
    質問者が未解決のままレス続ける時は
    名前欄に最初の質問のレス番号入れてくれんかね
    文脈わからなくなるし
    混ざって他の質問者が流されたりしちゃうこともあるから

    あんまり口うるさくするのもアレなんだけど
    マナーっつうか
    みんなで使う掲示板なんで、ちょっとした気遣いみたいなもんで

    596 = :

    おそらくaddEventListenerは要素に関数を紐付ける(バインド)のだから
    レシーバー(→this)が要素オブジェクトになると言いたかったんだろうが
    紐付けてるからそうなってるのではなくて
    紐づけてる風でもあるし、便利だからそうされてたのが
    デファクトとして今仕様になってると考えたほうが良いと思う
    何れにせよthisをどうしようが自由でそこに言語の縛りはないのだから

    597 = :

    いやjavascriptはthisをどうしようが勝手な言語だが他の一般的なクラスベースの言語はそんな自由じゃないだろ

    598 = :

    >>596
    うん、でもaddEventListenerは複数指定できるから
    要素に直接紐づけてるわけじゃないんだよね。

    便利だからわざわざthisを要素自身にして呼び出してる
    便利だから。jQueryも同じ。便利だからそうしている。

    599 = :

    つまり、
    $('.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 = :

    >>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一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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