Страницы

Поиск по вопросам

вторник, 25 декабря 2018 г.

JavaScript, приватные переменные

Как можно создать в классе (ecma6 class) приватную переменную?


Ответ

В es6 такой возможности нет. Многие думают, что классы es6 это какая-то новая конструкция или реализация , нет. Это обычный , новый синтаксис для старого доброго прототипного наследования.
class Animal { constructor() { this.name = "dog" } say() { alert("gaf") } }
То же самое, что и
function Animal() { this.name = "dog" } Animal.prototype.say = function () { alert("gaf") }
Поэтому приватных методов в классе не реализовано, вам придется решать эту проблему самому. Как? Например, через замыкание
const Animal = function () { let privateProp = "i am private";
class Animal { constructor() { this.name = "dog"; } // гетеры и сеттеры для свойства get PrivateProp() { return privateProp } set PrivateProp(value) { privateProp = value } }
return new Animal(); };
let dog = new Animal(); dog.privateProp; // приватное свойство dog.privateProp = "new private prop"; // меняем приватное свойство
Тут методы get/set просто для примера, в реальности скорее всего их не будет, если уже переменная приватная. Тут get/set единственные способы достучатся до privateProp, больше никак, уберете get/set privateProp станет настоящим приватным способом.
UPD Чуть ошибся, переменная создавалась бы одна для всех экземпляров, как написали в комментарии, поправил ответ. Теперь всегда будет создаваться свой экземпляр приватной переменной

Комментариев нет:

Отправить комментарий