yarkov
@yarkov
Помог ответ? Отметь решением.

Как изменить код или динамически создать геттеры и сеттеры?

Есть такой скрипт:
(function(window) {

	/**
	 * Главная функция-объект
	 * @return {Object} [Возвращаем ссылку на объект для вызова цепочки методов]
	*/
	window.Options = function (opts){
		
		var _private = {
			/**
			 * Приватный объект с настройками по-умолчанию. Доступа к нему через экземпляр объекта не будет.
			*/
			_options: {"id":1},
			
			__init__: function(opts){
				var settings = typeof opts == "object" ? opts : _private._options;
				_private._setAll(settings);
			},

			/**
			 * Приватный метод получения ключа объекта настроек
			 * @param {String} key [Имя ключа в объекте настроек] 
			 * @return {Mixed} [Возвращает опцию с ключом key. В случае если key не передан, то возвращает ссылку на объект для вызова цепочки методов. В случае если key не найден в настройках, то возвращает undefined]
			*/
			_getItem: function(key) {
				if(typeof key !== "undefined"){
					if(key in _private._options){
						return _private._options[key];
					}
					return undefined;
				}
				return this;
			},

			/**
			 * Приватный метод устанавливает ключ настройки key в значение переданного аргумента value
			 * @param {String} key [Имя устанавливаемого ключа в объекте настроек]
			 * @param {Mixed} value [Значение]
			 * @return {Object} [Возвращаем ссылку на объект для вызова цепочки методов]
			*/
			_setItem: function(key, val) {
				if(typeof val !== "undefined"){
					_private._options[key] = val;
				}
				return this;
			},

			/**
			 * Приватный метод возвращает объект настроек this._options
			 * @return {Object} [Возвращает объект настроек this._options]
			*/
			_getAll: function() {
				return _private._options;
			},

			/**
			 * Приватный метод устанавливает настройки из переданного объекта options
			 * @param {Object} options [Объект с настройками вида {"ключ": значение}]
			 * @return {Object} [Возвращаем ссылку на объект для вызова цепочки методов]
			*/
			_setAll: function(options){
				if(options && typeof options == "object"){
					for(opt in options){
						_private._options[opt] = options[opt];
					}
				}
				return this;
			}
		};
		
		_private.__init__(opts);

		return {
			getItem: _private._getItem,
			setItem: _private._setItem,
			get: _private._getAll,
			set: _private._setAll
		};
	};

})(window);

var options = new Options({"new": "newItem"});

alert(JSON.stringify(options.get()));


И есть желание сделать так, чтобы к свойствам можно было обращаться и
options.getItem(key)
и вот так:
var id = options.id;
Что посоветуете?
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
https://developer.mozilla.org/en-US/docs/Web/JavaS...

и может не нужна вам вообще эта обертка, раз уж оно только для "защиты".
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы