Sì, il primo è static method
anche 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 Person
costruttore.
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 è static
stata utilizzata la parola chiave per dichiarare il metodo statico isPerson
.
Per creare un oggetto di Person
classe.
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' class
introduzione in ES6 è principalmente uno zucchero sintattico rispetto al modello di ereditarietà basato sul prototipo esistente.