こんにちは。
午前中に下記で質問させていただいた者です。
https://teratail.com/questions/95118#reply-147746
質問中、解決方法としてとあるコードを頂きました。
getElementsByTagNameで導き出した配列のひとつひとつを取り出すといった内容のものだと思うのですが、読解がまったくできません。
ここ3時間ほど悩んでもう人に聞いてしまおうという段階になってしまいました。
yambejpさん、せっかく頂いたのにすみません。
いただいたコードはこちらです。
js
1<script> 2HTMLCollection.prototype.getElementsByTagName=function(i){ 3 var ret=[]; 4 Array.prototype.map.call(this,function(j){ 5 Array.prototype.push.apply(ret, Array.prototype.map.call(j.getElementsByTagName(i),function(k){ 6 return k; 7 })); 8 }); 9 return ret; 10}; 11window.onload=function(){ 12var touchList = document.getElementById('aplication').getElementsByTagName('li').getElementsByTagName('img'); 13console.dir(touchList); 14} 15</script> 16<ul id="aplication"> 17<li>test1</li> 18<li><img src="test2.jpg" alt="test2"></li> 19<li><img src="test3.jpg" alt="test3"></li> 20<li><img src="test4.jpg" alt="test4"><img src="test5.jpg" alt="test5"></li> 21<li>test6</li> 22</ul> 23<img src="test7.jpg" alt="test7">
自分なりに理解した内容をまとめます。
HTMLCollection.prototype.getElementsByTagName=function(i){
//HTMLコレクションにgetElementTagNameがついた場合はfunction①の内容を適用してください。function①は下記です
var ret=[]; //配列retをからのまま設定してください。
Array.prototype.map.call(this,function(j){
//配列のprototype情報のうちソースマップにcallメソッド①を適用してください。対象はthis(getElementsByTagName由来の配列)、内容はfunction②です。
//function②
Array.prototype.push.apply(ret, Array.prototype.map.call(j.getElementsByTagName(i),function(k){
//配列のprototype情報にapplyメソッドを足してください。(意味不明)。対象はret配列です。足す内容は、とある配列で、prototype情報のソースマップのうち、タグiにfunction③をかけたものです。functino③は下記です。
return k; //あらかじめ引数kをタグiと対応させておきました。kをかえす、つまりタグiを文字情報としてかえしてください。 }));
});
return ret; //これらすべてを踏まえたうえで、retに入れた情報をすべて表示してください。
};
特に下記がわかりません。
①new Arrayの意味はわかるのですが、Array単体で登場した時にその意味がわかりませんでした。
②push、call、applyの意味がwebで調べてもいまいちよくわかりません・・・
もしかしたらわからないところが増えて聞き直したり質問を増やすかも知れませんが
ヒントとなることはどしどしお教えくださると幸いです。
回答2件
あなたの回答
tips
プレビュー