Эта статья служит шпаргалкой по классам в JavaScript.
Вот пример полного класса с пояснительными комментариями:
class Person { constructor(name) { // We use _ convention to create properties (and prevent a stack overflow) // However such a property is not private: this._name = name; } get name() { return this._name; } set name(newName) { this._name= newName; } } class Programmer extends Person { // To create a private property, we use the # prefix // We have to initialize a private property in the upper scope of the class: #language; constructor(name, language) { // Accessing a property of the parent class with super(): super(name); // Setting a private property: this.#language = language; } writesCode() { console.log( this._name + " writes code in "+ this.#language ) } } // Initializing the original class: const freelancer = new Person("John"); // Using the getter: console.log(freelancer.name); // NOT using the getter (accessing the property directly, bypassing the getter): console.log(freelancer._name); // Using the setter: freelancer.name = "Doe"; console.log(freelancer.name); // Initializing extended class: const coder = new Programmer("Tony", "JavaScript"); coder.writesCode(); // Private property is not accessible: // This would throw a syntax error: console.log(freelancer.#language);
Сравнение функций-конструкторов и классов VS
ES6 предлагал возможность использовать ключевое слово class
, но по-прежнему можно использовать старый синтаксис Prototypal для получения того же результата.
Это показывает тот же самый класс, что и выше, но определенный «по-старому»:
function Person2(name) { this._name = name; }; // Adding getters and setters (ES5) Object.defineProperty(Person2.prototype, "name", { get: function name() { return this._name }, set: function name(newName) { this._name = newName } }); // Initializing: const freelancer2 = new Person2("John"); // Using the getter: console.log(freelancer2.name); // NOT using the getter (accessing the property directly, bypassing the getter): console.log(freelancer2._name); // Using the setter: freelancer2.name = "Doe"; console.log(freelancer2.name); // And it's possible to extend the prototype like so: Person2.prototype.writesCode = function writesCode(language) { console.log(`${this.name} writes code in ${language}`); }; freelancer2.writesCode('JavaScript');
Заключение
В этой короткой статье показан пример класса JavaScript с конструктором, геттером, сеттером, расширениями. Также показано, как создать такой класс с помощью функции-конструктора.
Если вы нашли это полезным, пожалуйста, нажмите кнопку аплодисментов 👏. Кроме того, не стесняйтесь комментировать! Буду рад помочь :)