Sì, il primo è static methodanche chiamato class method, mentre il secondo è un instance method.
Considera i seguenti esempi, per capirlo in modo più dettagliato.
In ES5
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.isPerson = function(obj) {
return obj.constructor === Person;
}
Person.prototype.sayHi = function() {
return "Hi " + this.firstName;
}
Nel codice sopra, isPersonè un metodo statico, mentre sayHiè un metodo di istanza di Person.
Di seguito, è come creare un oggetto dal Personcostruttore.
var aminu = new Person("Aminu", "Abubakar");
Utilizzando il metodo statico isPerson.
Person.isPerson(aminu); // will return true
Utilizzando il metodo dell'istanza sayHi.
aminu.sayHi(); // will return "Hi Aminu"
In ES6
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
static isPerson(obj) {
return obj.constructor === Person;
}
sayHi() {
return `Hi ${this.firstName}`;
}
}
Guarda come è staticstata utilizzata la parola chiave per dichiarare il metodo statico isPerson.
Per creare un oggetto di Personclasse.
const aminu = new Person("Aminu", "Abubakar");
Utilizzando il metodo statico isPerson.
Person.isPerson(aminu); // will return true
Utilizzando il metodo dell'istanza sayHi.
aminu.sayHi(); // will return "Hi Aminu"
NOTA: entrambi gli esempi sono essenzialmente gli stessi, JavaScript rimane un linguaggio senza classi. L' classintroduzione in ES6 è principalmente uno zucchero sintattico rispetto al modello di ereditarietà basato sul prototipo esistente.