Sim, o primeiro static method
também é chamado class method
, enquanto o segundo é um instance method
.
Considere os seguintes exemplos, para entendê-lo com mais detalhes.
No 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;
}
No código acima, isPerson
é um método estático, enquanto sayHi
é um método de instância de Person
.
Abaixo, é como criar um objeto a partir do Person
construtor.
var aminu = new Person("Aminu", "Abubakar");
Usando o método estático isPerson
.
Person.isPerson(aminu); // will return true
Usando o método de instância sayHi
.
aminu.sayHi(); // will return "Hi Aminu"
No ES6
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
static isPerson(obj) {
return obj.constructor === Person;
}
sayHi() {
return `Hi ${this.firstName}`;
}
}
Veja como a static
palavra-chave foi usada para declarar o método estático isPerson
.
Para criar um objeto de Person
classe.
const aminu = new Person("Aminu", "Abubakar");
Usando o método estático isPerson
.
Person.isPerson(aminu); // will return true
Usando o método de instância sayHi
.
aminu.sayHi(); // will return "Hi Aminu"
NOTA: Ambos os exemplos são essencialmente os mesmos, o JavaScript permanece uma linguagem sem classe. O class
introduzido no ES6 é principalmente um açúcar sintático sobre o modelo de herança baseado em protótipo existente.