- Введение
- Наследование
- MK.Object
- MK.Array
Приветствую всех читателей и писателей Хабра.
В предыдущей статье мы поговорили об основах работы с Матрешкой. В этой, я хочу рассказать, как наследовать Матрешку и как строить пока что небольшие приложения на её базе.
Матрешка устроенна в виде класса, сконструтированного при помощи кастомной функции Class
. Это немного измененная версия функции, о которой я писал на форуме javascript.ru (ссылка на доку).
Так почему классы? Класс — это лишь слово, не противоречащее парадигме прототипного программирования. Если взглянуть на документацию того же Backbone.js, то вы увидите, что и они оперируют словом «класс» без всяких стеснений. Мы можем поспорить о том, что в Javascript нет классов, есть конструкторы, и я с вами соглашусь, но, на деле, имеет ли этот спор смысл? Если конструктор выглядит как класс, плавает как класс, и крякает как класс, то это, наверное, и есть класс?
От лирики к делу. Итак, Матрешка создана в виде класса:
window.MK = window.Matreshka = Class({ ... });
Аргумент класса — прототип конструктора, который можно определить так:
var MyClass = Class({
constructor: function() { ... }
});
… который затем и возвращается из функции Class. Если конструктор не определен, то им станет пустая функция.
Один класс может быть унаследован от другого класса (в данном случае MyClass
наследуется от Матрешки):
var MyClass = Class({
'extends': MK
});
(Для 'extends'
кавычки нужны не только для того, чтоб избежать ошибки синтаксиса (extends — зарезервированное слово), но и для подсветки синтаксиса. Остальные свойства могут быть без кавычек.)
При наследовании Матрешки есть важное правило: конструктор должен быть всегда и в нем должен вызываться метод .initMK
, который, в данном случае, инициализирует псевдоприватные свойства: __id
(идентификатор экземпляра для внутреннего использования), объект .__events
(объект событий) и объект .__special
(хранящий значения «специальных» свойств, их акцессоры и привязанные элементы). Это же правило верно и для классов, которые будут объяснены в следующих статьях: MK.Array
и MK.Object
.
Читать полностью »