Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > JavaScript / HTML

JavaScript / HTML Создание динамической разметки страниц

Ответ
 
Опции темы
Старый 21.12.2013, 21:19   #1
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
class.js

Классическое наследование используя .prototype порой слишком "многословно" и хочется использовать что-то попроще и более схожее с другими языками. Факт остаётся фактом что в JS ECMA 5 до сих пор нету классов (ECMA 6 будет и очень приятные, но этого пока нету), используя .prototype их можно симулировать и больше чем просто классы тоже (но это отдельная тема).
Я использовал MooTools и другие библиотеки для классов, но решил замутить свою, со своими плюшками, как обычно изобретение велосипеда - но опыт хороший.

Ссылка: http://goo.gl/tRdo52

Библиотека позволяет создавать классы и наследовать их, также реализовывать prototype и constructor от других классов либо классических prototype'ов. И дополнительно к этому проверять наследует ли экземпляр другой класс (extends), или имплиментирует ли (implements), и является ли класс самого экземляра конкретным классом (typeof).

Пример работы:

// классический prototype, может быть с наследованием
function Charlie() {
    
this.delta 'myDelta';
}
// prototype метод
Charlie.prototype.work = function() {
    
this.delta += Math.random();
};

// отцовский класс
var Parent = Class.extend({
    
name'Parent',
    
constructor: function(options) {
        
this.foo options.foo || 'no foo!';
    },
    
fooMethod: function() {
        return 
this.foo.toUpperCase();
    },
    
bazMethod: function() {
        return 
this.foo ' extra text';
    }
});

// класс наследует Parent и исплементирует Charlie
var Child Parent.extend({
    
name'Child',
    
implement: [ Charlie ],
    
constructor: function(options) {
        
this.bar options.bar || 'no bar!';
    },
    
bazMethod: function(ext) {
        
// этот метод вызовет метод отцовского класса
        
return this.super('bazMethod') + ext;
    }
});

// экземпляр класса Child
var child = new Child({
    
foo'imFoo'
});

child.fooMethod(); // 'IMFOO'
child.bazMethod(' hey!'); // 'imFoo extra text hey!'
child.delta// 'myDelta'
child.work(); // добавит произвольное число в поле 'delta'
child.delta// 'myDelta0.6905072722584009'

child.implements(Charlie); // true
child.extends(Parent); // true
child.typeof(Child); // true 
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
ABTOMAT (22.12.2013), pax (22.12.2013), Phantom (22.12.2013)
Старый 22.12.2013, 01:46   #2
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: class.js

Мне вот только интересно. В ActionScript, который тоже основан на ECMA, есть классы. В JavaScript слово class является зарезервированным. Так в чём же дело-то? Запилили бы уже.
(Offline)
 
Ответить с цитированием
Старый 22.12.2013, 01:57   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: class.js

Запилили в стандарте: http://wiki.ecmascript.org/doku.php?id=harmony:classes
Но стандарт ECMA6 будет закончен к концу 2014 года только. Классы - весьма большая фича и она будет одной из последних реализована в броузерах. Но уже сейчас много чего есть, например FF уже зарелизили Generators (yield) что весьма большая фича и расширяет язык - можно делать свои итераторы, иметь контролируемый async code flow, и многое другое.
Вот отличная таблица совместимостей. В последней колонке (Node Harmony) - это если запускать node.js со спец флагом, можно юзать уже. Chrome и Node будут паралельны в этой таблице, т.к. оба используют общий стак технологий для JS.
Firefox же радует, что весьма лидирует по имплементации фичей, например arrow functions у FF уже давно.
http://kangax.github.io/es5-compat-table/es6/
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (22.12.2013)
Старый 22.12.2013, 07:47   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: class.js

Про harmony знаю, да. Генераторы использовал ради интереса в node-webkit. А про классы почему-то не слышал.
(Offline)
 
Ответить с цитированием
Старый 22.12.2013, 09:00   #5
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: class.js

Сообщение от moka Посмотреть сообщение
Классическое наследование используя .prototype порой слишком "многословно"
А мне норм
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 22.12.2013, 17:25   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: class.js

А я пока наследование не использовал, что-то не было такой надобности.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (23.12.2013)
Старый 23.12.2013, 03:24   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: class.js

Сообщение от pax Посмотреть сообщение
А я пока наследование не использовал, что-то не было такой надобности.
Наследование многие рассматривают как anti-pattern т.к. сторонники data-driven архитектуры. Тем более в node.js, если пишешь модульные системы (много micro-процессов) то естественно наследование и т.п. не уместно.

Плюсы в .prototype это когда есть данные, и нужно ими шаблонно оперировать, иметь методы и передавать туда данные и получать результат - это одно. А иметь объект и манипулировать напрямую - красивее тех. дизайн выходит.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (23.12.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:32.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com