2016-08-10 8 views
0

これで、静的な||ライブnodelistsは、コンセプトをテストしようと、私はさまざまなシナリオを試してみましたが、私の注意を引いた2つのシナリオがあります。それは明らかに起こっているようgetElementsBy ...ライブノード集合であるので、ライブと静的なノードリスト

var toBeLogged = document.getElementsByTagName('p'); 
console.log(toBeLogged.length); // Returns 1 to the console 
var newEl = document.createElement('p'); 
document.body.appendChild(newEl); 
console.log(toBeLogged.length); // Returns 2 to the console 

は理にかなっています更新後に値を再度要求するときに更新された値を返します。

が、小さな変化を伴うシナリオ番号2は、staticとしてノードリストの行為を「ライブ」になり:ので、私の質問は

var toBeLogged = document.getElementsByTagName('p').length; 
console.log(toBeLogged); // Returns 1 to the console 
var newEl = document.createElement('p'); 
document.body.appendChild(newEl); 
console.log(toBeLogged); // Returns 1 also to the console 

:なぜ生きてノードリストのlengthプロパティを表すために作成された変数ですプロパティを追加せずにノードリストを直接表す変数の値のようにライブ値を返さない。

私は可能な限り正確に物事を記述しようとしています。 ありがとうございます。それに費やした時間を感謝します。

答えて

1

document.getElementsByTagName('p').lengthは不変のプリミティブ値を返しますが、変更することはできません。置き換えることができます。 .lengthはアクセスするたびに新しいプリミティブ値を返しますが、document.getElementsByTagName('p')は毎回同じオブジェクトを返します。

+0

ありがとう、十分な説明。それを感謝Maxx。 – Hassan

関連する問題