今更ながらJavaScriptのcallについて学んでいた
callは関数がもつメソッドだということは知っていた
あとapplyはcallの引数の撮り方の違いがあるだけということはしっていた。
主体と客体が逆転する
var node_list = document.getElementsByTagName('a') var arr = Array.prototype.scile.call(node_list); arr.shift(); // 一つ目の要素がshiftされる
ここで重要なのは2点
- callは主体と客体が逆転している
客体.関数.call(主体, 引数);
applyの場合は
var = [配列] 客体.関数.apply(主体, 配列);
という形になっている。普通は
主体.関数(引数){客体}
みたいな感じになる所が、順番がいれかわっている。だから読み解きずらい
- 他の要素が持っている関数を使える
先の例だと document.getElementsByTagName で返される要素はArraryではなくNodeListだ。だからArrayのメソッドは使えない。でもArrayのメソッドが使いたい。そういうときに使う。
感想
概念はよくわかってないけど使い方は少しだけ学べた気がする。具体的にどう便利になるかというとあまり直感ではわからない。
参考
ひたすらこれをよんでコンソールで打ってた
applyとcallの使い方を丁寧に説明してみる - あと味
callとapply - JavaScriptとかPerlとかPHPとかさくらVPSとか勉強する