JavaScript protected

by Rohit Sharma

JavaScript

'use strict';

class PersonProtected {
  constructor(name) {
    this._name = name;

    return new Proxy(this, {
      get(target, name) {
        if (name.startsWith('_')) {
          throw new Error('Accessing to a private property is not allowed');
        } else {
          return target[name];
        }
      }
    });
  }
  get name() {
    return this._name;
  }
  set name(name) {
    this._name = name;
  }
  greeting(person) {
    return `hi ${person.name}`;
  }
}

const vasya = new PersonProtected('Vasya');
const petya = new PersonProtected('Petya');
console.log(vasya.greeting(petya));