Tak, pierwszy jest static method
również nazywany class method
, podczas gdy drugi to instance method
.
Rozważ następujące przykłady, aby zrozumieć to bardziej szczegółowo.
W 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;
}
W powyższym kodzie isPerson
jest metoda statyczna, a sayHi
metoda instancji Person
.
Poniżej znajduje się sposób utworzenia obiektu z Person
konstruktora.
var aminu = new Person("Aminu", "Abubakar");
Za pomocą metody statycznej isPerson
.
Person.isPerson(aminu); // will return true
Za pomocą metody instancji sayHi
.
aminu.sayHi(); // will return "Hi Aminu"
W ES6
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
static isPerson(obj) {
return obj.constructor === Person;
}
sayHi() {
return `Hi ${this.firstName}`;
}
}
Zobacz, jak static
użyto słowa kluczowego do zadeklarowania metody statycznej isPerson
.
Aby utworzyć obiekt Person
klasy.
const aminu = new Person("Aminu", "Abubakar");
Za pomocą metody statycznej isPerson
.
Person.isPerson(aminu); // will return true
Za pomocą metody instancji sayHi
.
aminu.sayHi(); // will return "Hi Aminu"
UWAGA: oba przykłady są zasadniczo takie same, JavaScript pozostaje językiem bezklasowym. class
Wprowadzony w ES6 to przede wszystkim cukier syntaktyczny w stosunku do istniejącego prototypu na bazie modelu dziedziczenia.