元スレ+ JavaScript の質問用スレッド vol.138 +
JavaScript覧 / PC版 /みんなの評価 :
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 = :
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)
この仕様にメリットってなにかある?
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.130 + (1001) - [97%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.130 + (974) - [97%] - 2016/10/26 14:18
- + JavaScript の質問用スレッド vol.108 + (1001) - [97%] - 2013/9/21 15:16
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.133 + (1001) - [97%] - 2018/6/8 10:45
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.134 + (1001) - [97%] - 2018/8/3 23:15
- + JavaScript の質問用スレッド vol.136 + (1001) - [97%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.137 + (1003) - [97%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.139 + (1001) - [97%] - 2019/5/27 15:15
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.117 + (1009) - [95%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [95%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.119 + (1002) - [95%] - 2014/10/3 15:30
トップメニューへ / →のくす牧場書庫について