var Person = (function() {
var privates = {}; //obiekt, w ktorym bedziemy trzymac prywatne zmienne wszystkich obiektow
var Person = function (name) {
this.name = name; //publiczna wlasnosc
this.key = Math.random();
privates[this.key] = {
salary: NaN
};
};
var throwIfNoPermission = function(that) {
if (Object.getPrototypeOf(that) !== Person.prototype) {
throw new TypeError();
}
};
Person.prototype.getSalary = function() {
throwIfNoPermission(this);
return privates[this.key].salary;
};
Person.prototype.setSalary = function(salary) {
throwIfNoPermission(this);
privates[this.key].salary = salary;
};
return Person;
}());
dmFyIFBlcnNvbiA9IChmdW5jdGlvbigpIHsKIHZhciBwcml2YXRlcyA9IHt9OyAvL29iaWVrdCwgdyBrdG9yeW0gYmVkemllbXkgdHJ6eW1hYyBwcnl3YXRuZSB6bWllbm5lIHdzenlzdGtpY2ggb2JpZWt0b3cKCiB2YXIgUGVyc29uID0gZnVuY3Rpb24gKG5hbWUpIHsKICB0aGlzLm5hbWUgPSBuYW1lOyAvL3B1YmxpY3puYSB3bGFzbm9zYwogIHRoaXMua2V5ID0gTWF0aC5yYW5kb20oKTsKICBwcml2YXRlc1t0aGlzLmtleV0gID0gewogICBzYWxhcnk6IE5hTgogIH07CiB9OwoKIHZhciB0aHJvd0lmTm9QZXJtaXNzaW9uID0gZnVuY3Rpb24odGhhdCkgewogIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhhdCkgIT09IFBlcnNvbi5wcm90b3R5cGUpIHsKICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwogIH0KIH07CgogUGVyc29uLnByb3RvdHlwZS5nZXRTYWxhcnkgPSBmdW5jdGlvbigpIHsKICB0aHJvd0lmTm9QZXJtaXNzaW9uKHRoaXMpOwogIHJldHVybiBwcml2YXRlc1t0aGlzLmtleV0uc2FsYXJ5OwogfTsKCiBQZXJzb24ucHJvdG90eXBlLnNldFNhbGFyeSA9IGZ1bmN0aW9uKHNhbGFyeSkgewogIHRocm93SWZOb1Blcm1pc3Npb24odGhpcyk7CiAgcHJpdmF0ZXNbdGhpcy5rZXldLnNhbGFyeSA9IHNhbGFyeTsKIH07CgogcmV0dXJuIFBlcnNvbjsKfSgpKTs=