Несмотря на то, что они технически не являются частными свойствами Объекта, они также могут рассматриваться как те, что у вас на уме, так как они ограничены в конструкторе или классе:
function Tester(initVal){
let privateProp = initVal;
this.publicProp = 'testing';
this.setPrivate = val=>{
privateProp = val;
return this;
}
this.getPrivate = ()=>{
return privateProp;
}
this.setStatic = (prop, val)=>{
if(typeof val === 'function')val.bind(this);
this.constructor.prototype[prop] = val;
return this;
}
}
const test = new Tester('Initial Value');
console.log(test.publicProp); console.log(test.privateProp);
console.log(test.getPrivate());
console.log(test.setPrivate('See how it works?').getPrivate());
test.setStatic('cool', 'neat');
const test2 = new Tester;
console.log(test2.cool);
test.setStatic('fun', function(){
return this.setStatic('staticProp', "Really, that's fantastic!");
});
test.fun(); console.log(test2.staticProp);