getElementsByTagName の返り値
getElementsByTagName
の返り値は HTMLCollection
のインスタンスです。
DOM3 までは「liveな NodeList」でしたが、DOM Standard (DOM4) からは「liveな HTMLCollection」として再定義されました。
書籍上の説明で getElementsByTagName
の返り値が NodeList
とされているなら、その書籍は情報が古いです。
HTMLCollection
HTMLCollection
のインスタンスは数字の添え字で参照できるオブジェクト郡ですが、扱えるプロパティは length
, item
, namedItem
の3種類しかありません。
参照方法こそ配列と同じですが、扱える関数が非常に少なく、いってみれば配列の機能縮小版です。
なお、特別な規定がなければ、HTMLCollection
のインスタンスはliveです。
Node とは
Node
は Interface の一種で JavaScript ではプロトタイプとなるオブジェクトにあたります。
書籍ではデータ型と説明されていたそうですが、String
型、Object
型に並ぶ「型の名前」ではありません。
Object 型の種類を表す指標には [[Class]]
とインスタンス元(プロトタイプ)があり、Node
はそのどちらにもなる可能性があります。
JavaScript
1var pCollection = document.getElementsByTagName('p');
2console.log(Object.prototype.toString.call(pCollection)); // [object HTMLCollection]
3console.log(pCollection instanceof HTMLCollection); // true
4console.log(pCollection instanceof NodeList); // false
5console.log(pCollection instanceof Node); // false
6
7var p = pCollection[0];
8console.log(Object.prototype.toString.call(p)); // [object HTMLParagraphElement]
9console.log(p instanceof HTMLParagraphElement); // true
10console.log(p instanceof HTMLElement); // true
11console.log(p instanceof Element); // true
12console.log(p instanceof Node); // true
13console.log(p.__proto__.__proto__.__proto__.__proto__ === Node.prototype); // true
このコードがわからないようでしたら下記用語について一通り調べてみてください。
- プロトタイプチェーン
- インスタンス
- コンストラクタ
new
演算子
Object.prototype.toString
__proto__
この辺りの知識がないと、「Node とは何か」を理解するのは難しいと思います。
Re: aaaaaaaa さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/16 06:20
2016/06/16 11:44
2016/06/16 11:49 編集
2016/06/17 09:45