querySelector:返回类型是什么?

时间:2018-08-06 10:10:49

标签: javascript inheritance selectors-api

根据MDN文档,obj = [ { id: 100, Lat: 19.25, Lon: 74}, { id: 100, Lat: 19.79, Lon: 74.19 }, { id: 101, Lat: 19.99, Lon:75.10 }, { id: 101, Lat: 20.37, Lon:68.9}, { id: 119, Lat: 17, Lon: 70 }, { id: 107, Lat: -16, Lon: -165 }, { id: 107, Lat: -15, Lon: -150 } ]; pivot = obj.reduce((acc,item) => { let {id,Lat,Lon} = item; if(!acc[id]) acc[id]= []; acc[item.id].push({Lat, Lon}); return acc; },{}); Object.keys(pivot).forEach((id) => { pivot[id].forEach(coords => { fn(coords.Lat,coords.Lon,id) //call your function here; }); }); 返回querySelector。但是,返回值通常比该值更丰富。

例如,如果我选择一个Element元素,我实际上会得到一个img,根据文档,它是该层次结构的一部分:

HTMLImageElement

我对继承的理解是,对象可以访问链下游的属性,但不能访问链上的属性。

这是否意味着EventTarget ← Node ← Element ← HTMLElement ← HTMLImageElement 实际上并没有返回querySelector,而是返回了Element的许多对象之一?

3 个答案:

答案 0 :(得分:1)

  

这是否意味着querySelector实际上并没有返回Element,而是返回了扩展Element的多个对象之一?

作为Element的子类的任何对象仍然是Element。这只是更具体的内容。

答案 1 :(得分:0)

当文档指示返回了特定的接口(Element)时,从逻辑上讲,这意味着实现该接口(HTMLImageElement)的所有内容也会被计数,否则它们必须列出所有子类,尤其是那些多余的子类。

答案 2 :(得分:0)

HTMLImageElement实际上是实现元素,而不是扩展元素,并保留了HTMLElement的所有属性,该属性实现了{{1 }}。

任何Element都检查instanceof返回的对象对于querySelector是正确的,除非它为null。因此,对于querySelector而言,只要元素实现了Element的所有属性并提供真实的检查,对于返回的元素的原型为HTMLImageElement类型就没关系。 Element

querySelector返回的元素保证具有instanceof Element的所有属性,或者为null,如果要使用其他专用属性,则必须进行自己的Element检查。