Как можно создать в классе (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
Чуть ошибся, переменная создавалась бы одна для всех экземпляров, как написали в комментарии, поправил ответ.
Теперь всегда будет создаваться свой экземпляр приватной переменной
Комментариев нет:
Отправить комментарий