Да, первый - static method
, также называемый class method
, а второй - instance method
.
Рассмотрим следующие примеры, чтобы понять их более подробно.
В 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;
}
В приведенном выше коде isPerson
является статическим методом, а sayHi
является методом экземпляра Person
.
Ниже описано, как создать объект из Person
конструктора.
var aminu = new Person("Aminu", "Abubakar");
Использование статического метода isPerson
.
Person.isPerson(aminu); // will return true
Использование метода экземпляра sayHi
.
aminu.sayHi(); // will return "Hi Aminu"
В ES6
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
static isPerson(obj) {
return obj.constructor === Person;
}
sayHi() {
return `Hi ${this.firstName}`;
}
}
Посмотрите, как ключевое слово static
использовалось для объявления статического метода isPerson
.
Для создания объекта Person
класса.
const aminu = new Person("Aminu", "Abubakar");
Использование статического метода isPerson
.
Person.isPerson(aminu); // will return true
Использование метода экземпляра sayHi
.
aminu.sayHi(); // will return "Hi Aminu"
ПРИМЕЧАНИЕ: Оба примера по сути одинаковы, JavaScript остается бесклассовым языком. class
, представленный в ES6 , является в основном синтаксическим сахаром по сравнению с существующей моделью наследования на основе прототипов.