In this answer, I will use the examples Array.prototype.forEach and Array.from (didn’t use Array.forEach because it does not exist). However, the same holds true for any other constructor function (apart from Array) or other property (in addition to forEach).
TL; DR
<constructor>.prototype.<method> should be used to refer to "instance methods". For example, Array.prototype.forEach.
<constructor>.<method> shall be used to refer to "static methods". For example, Array.from.
Are different.
In Javascript, every function has a property called prototype, which is always an object (or null). In the case of the function Array, the property prototype is an object that contains several properties and methods, such as map, filter, reduce, etc. Looks familiar, right?
When a function can be invoked using the operator new, it can also be called the constructor function. So when a new object is created from of a construction function, the internal property [[Prototype]] of this new created object points to the property prototype of the construction function.
For example, how Array is a function constructor, I can build a new object array like this:
const arr = new Array();
// `arr.[[Prototype]]` aponta para `Array.prototype`
// Podemos então, acessar, a partir do objeto construído,
// os métodos da propriedade `prototype` da função construtora,
// isto é, `arr.[[Prototype]]` aponta para `Array.prototype`.
typeof arr.map; // 'function'
typeof arr.filter; // 'function'
typeof arr.reduce; // 'function'
Thus, thanks to the prototyping chain, all methods of Array.prototype will be available in arr. To better understand, read the answers from How prototypes work in Javascript? and of What is a Javascript Prototype?.
We can therefore conclude that:
Array.prototype.forEach
The nomenclature to be used to refer to a method (in this case forEach) available at the property prototype of a construction function (such as Array). In the face of the Javascript prototyping chain, the method forEach can be accessed as property of any object built from the consttutor function Array.
In other words, we can use a nomenclature like Array.prototype.forEach to refer to the methods available in the "instances" of Array.
Array.from
Is the nomenclature to be used to reference a property of the constructor function Array. As it is not part of Array.prototype, is not passed to the "instances" of Array. It can be said that it is the nomenclature to be used by "static methods".
Some examples:
// `arr` é como se fosse uma "instância" de `Array`:
const arr = new Array();
console.log(typeof Array.map); // 'undefined'
console.log(typeof Array.from); // 'function'
console.log('---');
console.log(typeof Array.prototype.map); // 'function'
console.log(typeof Array.prototype.from); // 'undefined'
console.log('---');
console.log(typeof arr.map); // 'function'
console.log(typeof arr.from); // 'undefined'
Note in the above example that, if unmodified, arr "will inherit" all the properties of Array.prototype. The reason for this was at the beginning of this answer.
Also note that although available as property of the constructor function Array, the "static method" Array.from nay is accessible from Array.prototype or of arr (the "instance").
Also know that (for example above):
arr.forEach is the same as Array.prototype.forEach;
[].forEach is the same as Array.prototype.forEach;
However, it is more convenient to use Array.prototype.forEach than arr.forEach, since the latter depends on the variable name (in this case, arr).
[].forEach is also valid, but only because [] is a literal form of Javascript that will always refer to an array object built from Array.
In short, the standard <constructor>.prototype.<method> is always guaranteed to refer to methods present in objects constructed from <constructor>.
As well, "function constructing the
forEach”?– Luiz Felipe
I have separated two things for the answer to your question, https://developer.mozilla.org/en-US/docs/Glossario/Prototype and https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor... In the JS I believe most native functions, when you find them[Native code] in a return, she is a class... Another issue is that @Thyago Dias showed you an example because it is not recommended to change native functions for the sake of generating internal errors unless you know what you are doing.
– user167036
Thyago, I still couldn’t understand what you meant by "[...] constructor function
Array.forEach". Could you please try to clarify?– Luiz Felipe
A constructor is nothing more than a function, i.e., constructor function is a structure that describes states and behaviors of an object. A class can be considered a constructor function
– Thyago Dias