как спрятать переменные
Так называемые «классы» в js, никогда не создавал. Мне нужно решить две проблемы, с которыми я столкнулся. Вот они:
1. Необходимо спрятать данные. 2. Методы не должны определяться каждый раз при создании объекта. Вот варианты «классов»: // вариант 1 var Base = function (name) { this.name = name; // переменная видна, как ее спрятать? Проблема №1 }; Base.prototype.getName = function………………и т.д // вариант 2 var Base = function (name) { var getName = function () { return name; }; // проблема №2 return { getName: getName }; }; // вариант 3 var Base = function () { var getName = function () { return this.name; }; // замыкаем метод return function (name) { var obj = {name: name}; return { getName: getName.bind(obj) }; }; }; Хотелось бы знать, какие варианты «классов» еще существуют? |
Цитата:
Цитата:
|
var Base = (function () { var hideParam = "Скрытое поле"; //Объект Base сможет пользоваться этой переменной, а другие - нет. var Base = function (name) { this.name = hideParam; }; return Base; })(); |
Цитата:
|
Цитата:
|
Цитата:
на всякий случай: ".bind" - это п.2 |
можно сделать искусственный вариант, но придется вручную освобождать память, если объект более не нужен:
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 теперь убит теперь вместо приватных данных виден только номер. хотя его тоже можно поменять. так что это всё особого практического смысла не имеет. |
Цитата:
|
в последнем проекте я делал так:
this._private = {}; // тут все приватное |
спб всем, сделаю так
var Base = function (name) { this.privates = {}; this.privates.name = name; }; |
Часовой пояс GMT +3, время: 10:04. |