元スレ+ JavaScript の質問用スレッド vol.138 +
JavaScript覧 / PC版 /みんなの評価 :
504 = :
class構文にしちゃえよ
505 = :
アロー関数がわからない
507 = :
>>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 = :
無理にアロー関数を?使う必要はない
以上
509 = :
無理にでも使え
以上
510 = :
適材適所じゃよ
今は分からんでも一度使っておけば良い
511 = :
>>507
恥ずかしくないの?
512 = :
パンツじゃないから。
513 = :
JavaScript のthis は、文脈によって、Global(window) を指す事があるから、ややこしい
TypeScript は、これを踏襲しているけど、
Haxe, jQuery は、this の意味を変えている
515 = :
>>513
jQがそうしたことが
ピュアJS知らない世代の中に
thisの理解を間違う層を一定数生んでいる、気がする
516 = :
間違いなくあると思う
517 = :
>>513
> jQuery は、this の意味を変えている
変えてないよ。jQueryはDOMの仕様準拠だから
DOMのthisと同じ意味になってる
518 = :
DOMのthisの話だったよね。
ほいこれ。これがDOMのthisでjQueryはDOM標準に準拠してる。
http://jsfiddle.net/ub0rh3fo/
document.getElementById('id').addEventListener('click', function() {
this.classList.toggle('on');
},false);
519 = :
つまり、jQueryが悪いんじゃなくて、DOMが悪いんか
520 = :
一番ハマるのは、setTimeoutだろう。これもDOMだが
「Global(window) を指す事があるから、ややこしい」=setTimeoutぐらいしか
思いつかないんだが。あとは似たようなsetIntervalか。
522 = :
>>511はどういう意味?
523 = :
>>517
変えてるよ
eachとかmapとかfilterとか、いくらでもあるよね
524 = :
thisがややこしい?
thisは関数が呼ばれるときに決まる第0の引数のようなものなんだから
呼ばれ方によって呼ぶ方の取り決めによって如何様な値も取りうることは当然だし
ドット演算子と関数呼び出しを組み合わせるとレシーバが来るという基本はあるけれど
別にthisはそれだけのために存在してるものではないし
変な固定観念を捨てて簡単に考えれば何も難しくないと思うけどな
526 = :
「○○難しい」って人に「全然難しくないよ!」って返す人は教える才能ない
とはいえ悪いことでもないので、人に教えるなんて無駄なことせずにガシガシコード書いてればいい。
527 = :
>>523
const array = [1, 2, 3, 4,5];
array.forEach(function() {
console.log(this); // Windowと表示される。
});
いま、thisが「Global(window) を指す事があるから、ややこしい」
って話でしたよね?
528 = :
↑を見れば分かるように、
JavaScript標準自体がややこしいんだよね。
529 = :
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 = :
ちなみに、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 = :
ハイパー大雑把に言えば
thisはクラスのメンバ関数でクラス自体を参照するものだったじゃん?
532 = :
>>531
「俺の知っている言語では」という言葉が抜けてるよ
533 = :
全ては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 = :
>>527
jQueryはthis値を変えてるって話だったよね?
forEachとeachのthis値を比較してみ
535 = :
>>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 = :
>>535
君の個人的な「あり得ない」の話はしていない
jQueryがthis値を変えているのは事実
537 = :
>>536
その言い方だとjQueryがthisを変えてるのが悪いように見えるけど、
実際にはJavaScriptだってthisを変えているし、
むしろjQueryは正しい方向にthisを修正しているってことだろう?
538 = :
>>537
君が勝手に「良い」「悪い」の話しにすり替えているだけ
元々は>>513でしょ?
539 = :
>>517 変えてないよ。
↓
>>535 そもそもthisを変えない。ということはありえないよ
???
540 = :
jQuery君は相変わらず、主張が矛盾だらけですね
541 = :
>>526
教える才能もクソもないよ
JSの細かな仕様を覚えろと説明してもしょうがないでしょ
だから変な固定観念を捨てて柔軟に捉えろと言ってる
thisが難しいのではなくて難しく考えてるだけ
そしてそこを柔軟に捉えるのが難しいってだけで
最初から第0引数と思ってれば何にも難しくない
そこが難しくなってしまってるのはもう仕方のないことだから頑張れとしか言えん
何か詳しく知りたいのなら聞いてくれれば具体的に細かく教えるが
細かく聞いてそれで理解できる人は自分で調べられる
だからとりあえず固定観念を捨てろとしか言えん
542 = :
キモイ
543 = :
>>539
それ俺が言ったんじゃないんですけどw
>>540
俺は最初からjQueryは優れているという話をしてる。
jQueryがthisを変えているならば、それはその方が優れているからだ。
現に混乱の理由となっているthisがWindowとなるのは
JavaScript標準の話だっただろ
544 = :
>>543
自分は初めからjQueryの良し悪しなんて話してないんだけど
関係ないなら初めから関わってこないでよ
545 = :
俺ははじめからjQueryの方が良いという話をしている。
547 = :
jQueryやprototype.jsがバズる前夜
JSとAS界隈で、即席に閉じたスコープを作るのに
(function(){
})();
をほいほい書いちゃう宗教が出来て
それがループに適用されると
for(var i=0 ; i<配列.length ; i++)(function(index,item){
})(i, 配列[i]);
みたいな形になって、ここでcallやapplyを使って
thisを配列[i]にしちゃう宗派も出来た
その系譜がjQueryだったんだな
548 = :
549 = :
>>546
何か少し勘違いしてね?
イベントリスナーのthisArgがターゲット要素になるのは
ただ仕様でわざわざそうするように決まってるからで
何の自然で当然な動作でもなんでもないぞ
550 = :
>>547
へー面白い
類似してるかもしれないスレッド
- + 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
トップメニューへ / →のくす牧場書庫について