Javascript.RU

Оформление класса

Доброго всем.

Скажу сразу, я не яваскрипт-программист и этот пост для продвинутых программистов не о чем не говорит. Раньше делал функционал не особо заморачиваясь ООП. Короче стал заявляться на вакансию яваскрипт-программиста в одну компанию. Они как положено дали мне тестовое задание сделать некий компонент. После написания основного функционала я решил оформить класс вот таким образом:

var AnyComponent = function () {
	var proto = {
		// вот такой конструктор объектов
		constructor:function (oConf) {
			for (var i in proto) {this[i] = proto[i];}
			for (var i in oConf) {this[i] = oConf[i];}
		},
		default : {//значения по умолчанию для всех объектов
			attributeA : ...,
			attributeB : ..,
			...
		},
		//методы
		methodA : function(...) {...},
		methodB : function(...) {...},
		...
	};
	
	return proto.constructor;
}();//важны круглые скобочки

В методах использование установленных свойств объектов или соответствующими значениями по умолчанию следующим образом:

... this.attributeA  || this.default.attributeA ...

Такое использование дефолтных значений не позволяет раскидывать их по всем объектам, а брать их из одного места.

В методах объект доступен как обычно через this. Но что делать, когда нужно использовать интерфейсные события и там this указывает не на наш объект. Добавим замыкание в конструкторе:

constructor : function (oConf) {
	for (var i in proto) {this[i] = proto[i];}
	for (var i in oConf) {this[i] = oConf[i];}
	var oThis = this; // полезное замыкание объекта, там где this другой (интерфейсные события)
	// событийные обработчики только здесь, чтобы видеть oThis
	this.onEventA = function () {/* объект доступен через oThis*/};
	...
},

Такое оформление компонента/класса не проверялось на предмет корректности применения в различных IDE.

+1

Автор: DjDiablo, дата: 15 ноября, 2011 - 20:43
#permalink

Всё бы нечего, но если придётся постоянно создавать обьекты ,
то для каждого обьекта будет выполняться цикл копирования свойств в this из proto, а это потеря скорости.

В большинстве случаев задержка не критична, но она всё таки есть.
Прототипы могли бы быть более удачным решением чем копирование.


Автор: ЧеГе, дата: 18 ноября, 2011 - 17:01
#permalink

Да, прототипы это классика. Просто захотелось оформить класс в одних фигурных скобках )


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
9 + 1 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
Больше записей нет. Прокомментируйте эту запись - может быть, тогда он что-нибудь еще хорошее напишет ;)
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum