今更ながら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のメソッドが使いたい。そういうときに使う。

感想

概念はよくわかってないけど使い方は少しだけ学べた気がする。具体的にどう便利になるかというとあまり直感ではわからない。