Rolf B: Javascript und css-Selectoren

Beitrag lesen

Hallo Orlok,

zu diesem Code hätte ich Fragen.

var figcaptions = [].slice.call(document.querySelectorAll('.gallery figcaption'));

var contents = figcaptions.map(function(figcaption) {
  return figcaption.textContent;
});
  1. Warum [].slice und nicht Array.prototype.slice? Für [].slice muss die JS Engine ein Dummy-Array erzeugen. Wegwerfobjekte belasten den Garbage Collector unnötig. Oder sind die JITs so schlau, dass sie das erkennen?
  2. Warum überhaupt slice? Das macht ja einfach nur eine Kopie. Die NodeList ist zwar live, aber da JS single-threaded ist, sollte sie sich während des map Durchlaufs nicht ändern. Kann man es nicht direkt so schreiben?
var contents = Array.prototype.map.call(
    document.querySelectorAll('.gallery figcaption'),
    function(figcaption) { return figcaption.textContent; }
);
  1. Würde etwas dagegen sprechen, NodeList zu augmentieren? Sowas habe ich heute noch im Büro eingebaut, ich fand es praktisch, node.querySelectorAll.map(...) schreiben zu können. Und bevor man den .map Polyfill aus der MDN abschreibt - kann man einfach das hier machen?
NodeList.prototype.map = NodeList.prototype.map || Array.prototype.map;

Rolf

--
sumpsi - posui - clusi