のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,851人
昨日: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
    503 : Name_Not - 2019/03/30(土) 02:33:01.85 ID:???.net (-3,-30,-94)
    >>502
    >>330辺りからアロー関数のthisについて話があるから読んでみて
    俺もアロー関数は苦手で、いつも無名関数にしてる

    Hoge .prototype.run = function() { console.log(this); } // 1
    とかどうだろう。試す気力もないぐらい眠い。今日は、寝る。後は誰か頼んだ・・・
    504 : Name_Not - 2019/03/30(土) 05:53:03.31 ID:???.net (+19,-3,+0)
    class構文にしちゃえよ
    505 : Name_Not - 2019/03/30(土) 08:07:32.69 ID:???.net (+21,-12,-13)
    アロー関数がわからない
    506 : Name_Not - 2019/03/30(土) 17:51:11.16 ID:???.net (+0,-29,-45)
    >>505
    関数宣言のfunctionを省いて
    ()と{}の間に=>を書く書式にしたものだよ

    自分より上のスコープのthisが貫通するのが従来のfunctionとの違い
    507 : Name_Not - 2019/03/30(土) 21:41:52.17 ID:???.net (+36,-30,-145)
    >>505
    高階関数を簡単に書くためのものだよ

    高階関数っていうのは関数を引数に取る関数
    コールバックを引数にするとほぼ同等

    var array1 = [1, 4, 9, 16];
    var map1 = array1.map(function(x) {
     return x * 2
    });

    長ったらしいだろ?
    これをこう書ける。

    var map1 = array1.map(x => x * 2);

    こう書くことで、単に短く書けるだけでなく
    「関数が呼ばれる」という感じから「式を渡す」感じになるだろ?
    さらに関数っぽく見えないのでthisも呼び出し元のthisを
    そのまま参照するという感じが素直に受け入れられる

    たまに関数の改良型だと思ってなんでもアロー関数にするやつがいるけど
    高階関数用の引数だと思ったほうが良いよ
    508 : Name_Not - 2019/03/30(土) 22:01:07.62 ID:???.net (+56,+28,-20)
    無理にアロー関数を?使う必要はない
    以上
    509 : Name_Not - 2019/03/30(土) 22:22:04.33 ID:???.net (+51,+28,-2)
    無理にでも使え
    以上
    510 : Name_Not - 2019/03/30(土) 22:27:05.71 ID:???.net (+57,+29,-7)
    適材適所じゃよ
    今は分からんでも一度使っておけば良い
    511 : Name_Not - 2019/03/30(土) 22:52:11.48 ID:???.net (+87,+28,-1)
    >>507
    恥ずかしくないの?
    512 : Name_Not - 2019/03/30(土) 23:11:55.84 ID:???.net (+52,+29,-1)
    パンツじゃないから。
    513 : Name_Not - 2019/03/31(日) 00:05:18.16 ID:???.net (+78,-29,-50)
    JavaScript のthis は、文脈によって、Global(window) を指す事があるから、ややこしい

    TypeScript は、これを踏襲しているけど、
    Haxe, jQuery は、this の意味を変えている
    514 : Name_Not - 2019/03/31(日) 00:08:52.83 ID:???.net (-1,-29,-22)
    jQueryの$(this)を組み合わせるという手もあるのか
    515 : Name_Not - 2019/03/31(日) 00:11:40.91 ID:???.net (+62,+29,-8)
    >>513
    jQがそうしたことが
    ピュアJS知らない世代の中に
    thisの理解を間違う層を一定数生んでいる、気がする
    516 : Name_Not - 2019/03/31(日) 00:19:31.59 ID:???.net (+51,+28,+0)
    間違いなくあると思う
    517 : Name_Not - 2019/03/31(日) 00:43:31.01 ID:???.net (+41,-29,-68)
    >>513
    > jQuery は、this の意味を変えている

    変えてないよ。jQueryはDOMの仕様準拠だから
    DOMのthisと同じ意味になってる
    518 : Name_Not - 2019/03/31(日) 00:54:22.01 ID:???.net (+3,-30,-148)
    DOMのthisの話だったよね。
    ほいこれ。これがDOMのthisでjQueryはDOM標準に準拠してる。

    http://jsfiddle.net/ub0rh3fo/

    document.getElementById('id').addEventListener('click', function() {
    this.classList.toggle('on');
    },false);
    519 : Name_Not - 2019/03/31(日) 00:55:37.48 ID:???.net (+48,+20,-26)
    つまり、jQueryが悪いんじゃなくて、DOMが悪いんか
    520 : Name_Not - 2019/03/31(日) 00:57:54.81 ID:???.net (+23,-29,-57)
    一番ハマるのは、setTimeoutだろう。これもDOMだが
    「Global(window) を指す事があるから、ややこしい」=setTimeoutぐらいしか
    思いつかないんだが。あとは似たようなsetIntervalか。
    521 : Name_Not - 2019/03/31(日) 02:06:21.24 ID:???.net (-6,-29,-13)
    immediate省くな
    522 : Name_Not - 2019/03/31(日) 10:32:14.09 ID:???.net (+63,+28,-2)
    >>511はどういう意味?
    523 : Name_Not - 2019/03/31(日) 10:35:47.98 ID:???.net (+43,-29,-4)
    >>517
    変えてるよ
    eachとかmapとかfilterとか、いくらでもあるよね
    524 : Name_Not - 2019/03/31(日) 10:41:49.12 ID:???.net (+63,+30,-85)
    thisがややこしい?
    thisは関数が呼ばれるときに決まる第0の引数のようなものなんだから
    呼ばれ方によって呼ぶ方の取り決めによって如何様な値も取りうることは当然だし
    ドット演算子と関数呼び出しを組み合わせるとレシーバが来るという基本はあるけれど
    別にthisはそれだけのために存在してるものではないし
    変な固定観念を捨てて簡単に考えれば何も難しくないと思うけどな
    525 : Name_Not - 2019/03/31(日) 13:02:05.48 ID:???.net (-2,-30,-87)
    chrome ver73 64bit使ってるけどimport/exportがSyntax Errorになる
    まだ未実装ということでwebpackだかbabelだかソース変換ツールが必要なのかな
    526 : Name_Not - 2019/03/31(日) 13:05:18.20 ID:???.net (+94,+30,-28)
    「○○難しい」って人に「全然難しくないよ!」って返す人は教える才能ない
    とはいえ悪いことでもないので、人に教えるなんて無駄なことせずにガシガシコード書いてればいい。
    527 : Name_Not - 2019/03/31(日) 13:10:02.59 ID:???.net (+7,-30,-65)
    >>523
    const array = [1, 2, 3, 4,5];

    array.forEach(function() {
    console.log(this); // Windowと表示される。
    });

    いま、thisが「Global(window) を指す事があるから、ややこしい」
    って話でしたよね?
    528 : Name_Not - 2019/03/31(日) 13:10:45.45 ID:???.net (+57,+29,-3)
    ↑を見れば分かるように、
    JavaScript標準自体がややこしいんだよね。
    529 : Name_Not - 2019/03/31(日) 13:15:54.69 ID:???.net (+3,-30,-171)
    document.getElementById('id').addEventListener('click', function() {
      const array = [1, 2, 3];

      console.log(this); // ここのthisはDOM Element

      array.forEach(function() {
        console.log(this); // ここのthisはWindow
      });
    }, false);

    このように、thisが変わるのがややこしいって話でしょ?
    jQueryとか関係ないよ。
    530 : Name_Not - 2019/03/31(日) 13:20:39.12 ID:???.net (+3,-30,-170)
    ちなみに、jQueryのeach使って、thisを変えたくなければ
    アロー関数を使えばいい。これもJavaScript標準と同じ

    $('#id').on('click', function() {
      const array = [1, 2, 3];

      console.log(this); // ここのthisはDOM Element
      $.each(array, () => console.log(this)); // ここのthisもDOM Element
    });
    531 : Name_Not - 2019/03/31(日) 13:28:58.89 ID:???.net (+90,+28,-39)
    ハイパー大雑把に言えば
    thisはクラスのメンバ関数でクラス自体を参照するものだったじゃん?
    532 : Name_Not - 2019/03/31(日) 13:40:04.88 ID:???.net (+70,+29,-9)
    >>531
    「俺の知っている言語では」という言葉が抜けてるよ
    533 : Name_Not - 2019/03/31(日) 13:50:56.28 ID:???.net (+3,-30,-83)
    全てはJavaやC++のthisの説明がダメダメなんだよ。


    class Hoge {
     private String str = 'hoge';
     public void foo() {
      System.out.println(this.str); // ×間違い thisはクラスのインスタンス自身です
     }
    }

    Hoge hoge = new Hoge();
    hoge.foo()

    ○ 正解 thisとはfooメソッドを呼んだ時の.の左側のことです。


    と正しく説明していれば、JavaScriptも同じだってわかるのに
    534 : Name_Not - 2019/03/31(日) 14:39:11.10 ID:???.net (+44,-29,-30)
    >>527
    jQueryはthis値を変えてるって話だったよね?
    forEachとeachのthis値を比較してみ
    535 : Name_Not - 2019/03/31(日) 14:55:05.05 ID:???.net (+165,-30,-154)
    >>534
    そもそもthisを変えない。ということはありえないよ

    document.getElementById('id').addEventListener('click', function() {
      const array = [1, 2, 3];

      console.log(this); // ここのthisはDOM Element

      array.forEach(function() {
        console.log(this); // ここのthisはWindow ← 【thisが変わってしまっている】
      });
    }, false);
    536 : Name_Not - 2019/03/31(日) 15:16:10.62 ID:???.net (+95,+29,-24)
    >>535
    君の個人的な「あり得ない」の話はしていない
    jQueryがthis値を変えているのは事実
    537 : Name_Not - 2019/03/31(日) 15:29:04.93 ID:???.net (+101,+21,-53)
    >>536
    その言い方だとjQueryがthisを変えてるのが悪いように見えるけど、
    実際にはJavaScriptだってthisを変えているし、
    むしろjQueryは正しい方向にthisを修正しているってことだろう?
    538 : Name_Not - 2019/03/31(日) 17:09:44.81 ID:???.net (+72,+29,-13)
    >>537
    君が勝手に「良い」「悪い」の話しにすり替えているだけ
    元々は>>513でしょ?
    539 : Name_Not - 2019/03/31(日) 17:23:16.55 ID:???.net (+103,+29,-2)
    >>517 変えてないよ。
     ↓
    >>535 そもそもthisを変えない。ということはありえないよ

    ???
    540 : Name_Not - 2019/03/31(日) 17:39:05.90 ID:???.net (+98,+29,-16)
    jQuery君は相変わらず、主張が矛盾だらけですね
    541 : Name_Not - 2019/03/31(日) 17:44:24.52 ID:???.net (+75,+30,-86)
    >>526
    教える才能もクソもないよ
    JSの細かな仕様を覚えろと説明してもしょうがないでしょ
    だから変な固定観念を捨てて柔軟に捉えろと言ってる
    thisが難しいのではなくて難しく考えてるだけ
    そしてそこを柔軟に捉えるのが難しいってだけで
    最初から第0引数と思ってれば何にも難しくない
    そこが難しくなってしまってるのはもう仕方のないことだから頑張れとしか言えん
    何か詳しく知りたいのなら聞いてくれれば具体的に細かく教えるが
    細かく聞いてそれで理解できる人は自分で調べられる
    だからとりあえず固定観念を捨てろとしか言えん
    542 : Name_Not - 2019/03/31(日) 18:29:44.25 ID:???.net (+35,+17,+0)
    キモイ
    543 : Name_Not - 2019/03/31(日) 18:53:41.17 ID:???.net (+113,+29,-69)
    >>539
    それ俺が言ったんじゃないんですけどw

    >>540
    俺は最初からjQueryは優れているという話をしてる。
    jQueryがthisを変えているならば、それはその方が優れているからだ。

    現に混乱の理由となっているthisがWindowとなるのは
    JavaScript標準の話だっただろ
    544 : 520 - 2019/03/31(日) 18:59:59.96 ID:???.net (+73,+29,-37)
    >>543
    自分は初めからjQueryの良し悪しなんて話してないんだけど
    関係ないなら初めから関わってこないでよ
    545 : Name_Not - 2019/03/31(日) 19:02:47.80 ID:???.net (+91,+29,-17)
    俺ははじめからjQueryの方が良いという話をしている。
    546 : Name_Not - 2019/03/31(日) 19:10:31.71 ID:???.net (-12,-29,-135)
    >>535
    何か少し勘違いしてね?

    addEventListenerは第二引数に渡される関数を
    DOM要素にバインドするメソッドなんだから
    thisがイベントターゲットになるのは当たり前

    forEachは引数に渡された関数を繰り返すだけなんだから
    何にもバインドされてない関数のthisがグローバルになるのも当たり前よ
    547 : Name_Not - 2019/03/31(日) 19:18:20.73 ID:???.net (+33,-30,-125)
    jQueryやprototype.jsがバズる前夜
    JSとAS界隈で、即席に閉じたスコープを作るのに

    (function(){
    })();

    をほいほい書いちゃう宗教が出来て
    それがループに適用されると

    for(var i=0 ; i<配列.length ; i++)(function(index,item){
    })(i, 配列[i]);

    みたいな形になって、ここでcallやapplyを使って
    thisを配列[i]にしちゃう宗派も出来た

    その系譜がjQueryだったんだな
    548 : 520 - 2019/03/31(日) 19:23:31.97 ID:???.net (+102,+29,-16)
    >>545
    では、>>523にレスしたのが間違いだね
    549 : Name_Not - 2019/03/31(日) 19:32:24.88 ID:???.net (+62,+29,-40)
    >>546
    何か少し勘違いしてね?
    イベントリスナーのthisArgがターゲット要素になるのは
    ただ仕様でわざわざそうするように決まってるからで
    何の自然で当然な動作でもなんでもないぞ
    550 : Name_Not - 2019/03/31(日) 20:12:51.07 ID:???.net (+56,+28,+0)
    >>547
    へー面白い
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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