А ВОТ ТАК (при чем так можно делать уже 200 лет отроду):
ES6:
var say = Symbol()
class Cat {
constructor(){
this[say]() // call private
}
[say](){
alert('im private')
}
}
ES5:
var say = Math.random() // like Symbol()
function Cat(){
this[say]() // call private methods
}
Cat.prototype[say] = function(){ alert('im a private') }
Пример использования ES6:
var handlers = Symbol()
class EventEmitter {
constructor(){
this[handlers] = []
}
on(handler){
this[handlers].push(handler)
}
emit(){
for(let handler of this[handlers]) handler()
}
}
class Cat extends EventEmitter {
}
var q = new Cat()
q.on // function
q.emit // function
q.handlers // undefined cuz PRIVATE ;)
И не обязательно больше учить названия свойств из реализации класса, таких как внутреннее свойство handlers, боясь их случайно перекрыть в классах наследниках. Использую приватные уже 6 лет. И ни каких проблем с утечками. Не понимаю людей которые говорят что в яваскрипте приватных нет.
Наслаждайтесь ;)
selfи вместо этого сделать простоvar one=1и вызывать безnew- намного красивее будет выглядеть – Grundy Jul 18 '16 at 06:36