Joose — это самодостаточная метаобъектная система с открытым исходным кодом для JavaScript с поддержкой классов , наследования , миксинов , черт и аспектно-ориентированного программирования .
Система метаобъектов Joose является многопарадигмальной. Она поддерживает стили программирования на основе классов и прототипов , а также наследование на основе классов и расширение на основе ролей. В то время как другие фреймворки JavaScript часто специализируются на доступе к DOM и AJAX , Joose специализируется исключительно на внедрении успешных методов программирования в язык сценариев JavaScript. Таким образом, Joose часто используется в сочетании с другим фреймворком JavaScript DOM/Ajax и тестируется с jQuery , YUI , Dojo , ExtJS , Prototype , Mootools и PureMVC.
Joose во многом вдохновлен Moose , объектной системой Perl 5 , которая, в свою очередь, была вдохновлена объектной системой Perl 6 , но в отличие от Perl и Moose, Joose не поддерживает множественное наследование .
Два класса, написанные на Joose:
Класс ( "Точка" , { имеет : { x : { is : "rw" }, y : { is : "rw" } }, методы : { clear : function () { this.setX ( 0 ) ; this.setY ( 0 ) ; } } } ) ; Класс ( "Point3D" , { isa : Point , has : { z : { is : "rw" } }, after : { clear : function () { this . setZ ( 0 ); } } });
Point3D — это подкласс Point. Он имеет другой определенный атрибут и дополнительный код для запуска после запуска метода суперкласса clear(). «rw» означает, что атрибут доступен для чтения и записи с парой методов доступа get/set, сгенерированных автоматически.