NodeList artık tüm büyük tarayıcılarda forEach () içeriyor
MDN'deki nodeList forEach () öğesine bakın .
Orijinal cevap
Bu yanıtların hiçbiri NodeList'in neden Array'den miras almadığını, dolayısıyla ona sahip olmasına forEach
ve diğerlerinin hepsine izin verdiğini açıklamıyor .
Cevap bu es-talk başlığında bulunur . Kısacası, web'i bozar:
Sorun, instanceof'un hatalı olarak örneğin Array.prototype.concat ile kombinasyon halinde bir Array olduğu anlamına geldiğini varsayan koddu.
Google'ın Kapatma Kitaplığında, bu nedenle neredeyse tüm Google uygulamalarının başarısız olmasına neden olan bir hata vardı. Kitaplık bulunur bulunmaz güncellenmiştir, ancak yine de concat ile birlikte aynı yanlış varsayımı yapan kodlar olabilir.
Yani, bazı kodlar şöyle bir şey yaptı
if (x instanceof Array) {
otherArray.concat(x);
} else {
doSomethingElseWith(x);
}
Ancak, concat
"gerçek" dizileri (Array örneğini değil) diğer nesnelerden farklı olarak ele alır:
[1, 2, 3].concat([4, 5, 6])
[1, 2, 3].concat(4)
Bu, yukarıdaki kodun x
bir NodeList olduğu zaman kırıldığı anlamına gelir , çünkü daha önce doSomethingElseWith(x)
yoldan aşağı inerken , daha sonra otherArray.concat(x)
, x
gerçek bir dizi olmadığı için tuhaf bir şey yapan yoldan aşağı indi .
Bir süredir Elements
Array'in gerçek bir alt sınıfı olan ve "yeni DüğümListesi" olarak kullanılacak bir sınıf için bir öneri vardı . Bununla birlikte, çeşitli teknik ve spesifikasyonlarla ilgili nedenlerden dolayı henüz uygulanması mümkün olmadığından, en azından şimdilik DOM Standardından kaldırıldı .