можно сделать искусственный вариант, но придется вручную освобождать память, если объект более не нужен:
var Base = (function() {
var prnum = 0, privates = {};
function cls(name) {
this._id = ++prnum;
privates[this._id]= {
name: name
};
}
cls.prototype.getName = function() {
var data = privates[this._id];
return data.name;
};
cls.prototype.destroy = function() {
if (this._id) {
delete privates[this._id];
delete this._id;
}
};
return cls;
})();
var obj1 = new Base("n1");
var obj2 = new Base("n2");
var obj3 = new Base("n333");
alert(obj1.getName() + " " + obj2.getName() + " " + obj3.getName());
obj1.destroy(); // obj1 теперь убит
теперь вместо приватных данных виден только номер.
хотя его тоже можно поменять.
так что это всё особого практического смысла не имеет.