"class methods" in JavaScript are actually functions defined on a prototype. That means that even if an object does not inherit from the Array prototype, you can call Array methods on it, as long as it follows the array structure (i.e.: It is an object with a length property and properties indexed by integers). However, the object holds no reference to Array.prototype, so you need to explicitly select Array.prototype as the object the method lives in.
The document.querySelectorAll function returns a NodeList, which is neither an Array nor inherits from the Array prototype. However, as a NodeList has a similar internal structure to an Array, you can still use the forEach function. But since NodeList does not inherit from the Array prototype, trying to use .forEach on a NodeList would raise an error (this is not exactly true - see the note at the end of my answer). For this reason, you need to explicitly state that you are calling a method from Array.prototype on the NodeList, and that is done by using the .call method from Function.prototype.
In summary:
Array.prototype.forEach.call(links, function(link) { /* something */ })
means:
Take the forEach function from Array.prototype and call it on links, which is a non-Array object, with some function as its argument.
Note that on recent versions of browsers, the NodeList prototype does provide a forEach method which works the same as the Array one, so the example from the Electron API is probably using the Array version for compatibility with older versions. If you have a web app and only care about supporting modern versions of Chrome and Firefox, you can just call forEach on your NodeList. In fact, since Electron updates about 2 weeks after whenever Chrome updates, it should be safe to use NodeList.prototype.forEach in Electron. :)
linkis not an array, it doesn't have alinks.forEachproperty. So, in order to useforEachon that value, you have to get a reference toArray.prototype.forEachsomehow.[].forEach.call(links, link => ...)will work too.forEach()was add toNodeListfor exactly that reason. However, there are some other Array methods, such as.map()orreduce()which have not been added, so the older syntax is still useful for those.