Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Search found 34 matches
Author Message
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Wed Feb 20, 2008 2:13 am   Subject: yaji - ещё один вариант наследования
WingedFox
Я думаю, я понял о чём Вы.
Понятное дело, что объект в прототипе класса будет одним на все объекты, построенные на его основе - тут и спорить нечего. Я просто не считаю, что это нужно исправлять. Нужно этим пользоваться!
Видимо проблема в том, что у вас не предусмотрена функция "инициализатор" объекта - по типу initialize в prototype.js - в ней можно было бы записать в this все необходимые свойства-объекты и одновременно пользоваться объектами в прототипах классов.
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Wed Feb 20, 2008 1:39 am   Subject: yaji - ещё один вариант наследования
cloneObject нужен для того, чтобы объекты сохраняли свои свойства на момент определения класса. Без него возможна ситуация, когда в свойствах окажется совсем не то, что ожидается.
У меня в моём проекте у самого корневого "класса" в прототипе есть свойство __common, которому в самом начале присваивается new Object().
На странице PHP генерит код, который заполняет это свойство какими-то значениями. И самое интересное в том, что эти значения доступны для всех объектов, созданных на основе какого-либо "класса", как this.__common. - имхо, это очень удобно (правда я только недавно это придумал, поэтому __common используется не на полную катушку)
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Wed Feb 20, 2008 1:16 am   Subject: yaji - ещё один вариант наследования
WingedFox
var Class1 = extend(function() {}, {
pNumber: 1
});

var Class2 = extend(Class1, {
pNumber: 0
});

var Obj1 = new Class2();
alert(Obj1.pNumber); // -> 1
Ну и не работает в IE6 (потому что super - это зарезервированное слово) и в Safari (пёс его знает почему - у меня не получилось приделать инструменты для разработчика)

Я считаю, что будет справедливым хотябы один раз переделать! Ведь этот форум не Склад готовых решений =))
Кстати, а зачем Вы используете cloneObject ?
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 11:16 pm   Subject: yaji - ещё один вариант наследования
WingedFox
Да ладно Вам, перестаньте - если это не баг, то значит в этой фиче должен быть какой-то смысл !
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 10:39 pm   Subject: yaji - ещё один вариант наследования
Именно так оно и фунициклирует, всё верно.
Своим методам нефиг делать в прототипе. Что, кстати, совсем не мешает им жить в других прототипах.
WingedFox, ну тогда Вам шах (сдавайтесь =)
var Class1 = extend(function() {}, {
Func1: function() {
return {
self: self,
clazz: clazz
}
}
});
var Class2 = extend(Class1, {});

var Obj2 = new Class1();
var Obj3 = new Class2();

alert(Obj2.Func1().clazz == Obj3.Func1().clazz); // -> true /* это точно баг =) */
alert(Obj3.Func1().clazz == Class1); // -> true /* это причина */
alert(Obj3.Func1().self == Obj3); // -> false /* и ещё один баг, самый главный */
Переменные clazz и self использовать нельзя! И всё из-за замыкания, в котором живут все неперекрытые функции класса.
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 8:32 pm   Subject: yaji - ещё один вариант наследования
3. Минимальное использование памяти: все родительские методы спокойно живут в своих прототипах.
За то свои методы живут далеко не в прототипе =)
var Class1 = extend(function() {}, {
Func1: function() {
alert(clazz);
}
});
var Obj2 = new Class1();
Obj2.Func1();
function anonymous() {
var clazz = arguments.callee, parent = arguments.callee.parent, self = this;
for (var i in clazz.ext) {
if (!clazz.ext.hasOwnProperty(i)) {
continue;
}
this[i] = cloneObject(clazz.ext[i]);
}
this.Func1 = function () {alert(clazz);};
}
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 8:04 pm   Subject: yaji - ещё один вариант наследования
2. про .call и .apply я упомянул не просто так
А! Я не заметил. Вобщем, тест "на дурака" не пройден =)
4. Отладка вполне возможна
У меня не получилось посмотреть почему не работает мой скрипт в FireBug - от части по этому я и поторопился отрапортовать.
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 7:45 pm   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
AKS
Ну вобщем-то не суть сколько раз я это написал. Если бы я писал на англоязычном форуме, то я бы (со временем =) начал бы писать по английски =) Псевдо - это здешний термин.
+ Из того, что "впечатление складывается" совсем не следует то, что у меня паразиты в сознании =)
Есть надежда, что все js-движки будут использовать одну виртуальную машину? :)
ну я надеюсь, что тамарин выйдет в нашей жизни =) Но "на тамарина надейся, а сам не плошай" - к появлению классов можно готовиться уже сейчас ;)

Кстати, [url=http://www.mozilla.org/projects/tamarin/faq.html#details]тут написано, что этот тамарин кроме Mozilla поддерживает ещё и Adobe - так что ActionScript будет один в один как ES4
  Topic: yaji - ещё один вариант наследования
Andrey Mindubaev

Replies: 88
Views: 103621

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 7:35 pm   Subject: yaji - ещё один вариант наследования
А не работает. Точнее работает, но не так:
var Class1 = extend(function() {}, {
Func1: function() {
alert("1.1");
self.Func2();
},
Func2: function() {
alert("1.2");
this.Var1 = 1;
}
});

var Class2 = extend(Class1, {
Func1: function() {
alert("2.1");
parent.Func1();
},
Func2: function() {
alert("2.2");
parent.Func2();
}
});

var Obj2 = new Class2();
Obj2.Func1(); // должно быть 4 алерта: 2.1, 1.1, 2.2, 1.2

var Obj2_1 = new Class2();
alert(Obj2_1.Var1); // должно быть undefined
Имхо, самый главный недостаток метода - это невозможность отладки.
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Tue Feb 19, 2008 12:42 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Андрей Сумин
Видимо, в наших нижегородских JS собак что-то добавляют...
Я не могу не упираться - псевдо-аргументы против псевдо-классов ("я не вижу большой необходимости в искусственном приближении языка", "Все в рамках js без оберток", "...-и-прочих-лжесущностей", "Ну и наконец зачем все это городить?") очень сложно принять на веру.

Про ресурсоёмкость я где-то читал...
Но ведь вместе с разработкой спецификаций реализуется проект Tamarin - он должен всё стерпеть (даже псевдо классы =)
Правда, сдаётся мне, что они там никак не могут придумають всё до конца:
http://wiki.ecmascript.org/doku.php?id=proposals:builtin_classes#open_issues
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Mon Feb 18, 2008 12:48 pm   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
gregof.ya.ru
Я не имел ввиду ничего плохого, не хотел сказать, что спроектировано не правильно. Если вам так показалось, то прошу прощения (что-то я действительно написал как будто критикую)

Update
Кстати, Фёдор, приветствую Вас =) Рад, что вы присоединились к дискусии (ну или хотябы что ей заинтересовались)
  Topic: Частные способы клонирования
Andrey Mindubaev

Replies: 49
Views: 49678

PostForum: Разное :: JavaScript   Posted: Mon Feb 18, 2008 12:45 pm   Subject: Частные способы клонирования
AKS
Сдаюсь, со всем согласен =)
<html>
<body>

<script>

var Flag = 0, Intervals = [];

function clone(object) {
if (!object)
return;
clone.prototype = object;
return new clone;
};

function changer(value, id) {
if (!Flag)
return;
clearInterval(Intervals[id]);

var cnt = 0, obj = {
value: value
}, values = [];

for (var i=0; i<1000; i++)
values.push(clone(obj));

for (var i=0; i<values.length; i++)
if (values[i].value != value)
cnt++;

console.log(id+": "+cnt);
}

for (var i=1; i<10; i++)
Intervals[i] = setInterval("changer(" + i + ", " + i + ");", 1);
setTimeout(function() { Flag = 1; }, 150);

</script>

</bod ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Mon Feb 18, 2008 12:07 pm   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
AKS, =)
Да ладно Вам придираться то =) Я же не менял "весь код" своего проекта. К тому же те полтора килобайта менялись до того, как я написал эту фразу - поэтому не считается =)
  Topic: Частные способы клонирования
Andrey Mindubaev

Replies: 49
Views: 49678

PostForum: Разное :: JavaScript   Posted: Mon Feb 18, 2008 2:41 am   Subject: Частные способы клонирования
KES
В любом случае, функцию, как свойство клонируемого объекта не получится клонировать. Поэтому нет идеального варианта, а следовательно нужно исходить из других критериев: например из быстродействия + можно смириться с некоторыми недостатками =)
function clone(object) {
if (object instanceof Object) {
function F() {};
F.prototype = object;
return new F();
}
else
return object;
}
AKS, а ведь KES прав - если эта функция будет вызываться одновременно из нескольких потоков (по setInterval, например), то когда-нибудь это будет работать не так как ожидается.
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Mon Feb 18, 2008 2:15 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Rumata, AKS
Я тут многа думал о том почему же мы друг друга не понимаем =) И пример у меня какой-то неправильный получился - его действительно можно решать и "по нормальному" =) Я его переформулирую:
В некой системе есть набор объектов. Каждый объект по сигналу может отправлять какому-либо получателю свои данные.
Мы знаем, что в момент запуска в системе должно быть только 2 типа объекта (те, которые я описал в предыдущий раз).
Так же мы знаем, что через некоторое время поступит задача разработать другие типы объектов. Количество новых типов объектов ничем не ограничено.
Кстати, показательные выступления скорее всего действительно не получатся... По сути результатом должно было бы стать "кто быстрее остальных не сможет дальше решать задачу, не переделывая весь код, тот и проиграл" - а это долго, а значит не реально.

Гость, если честно я не врубился в Ваш пример =( По крайней мере в нём не реализован вызов функций родительских "классов".

An6rey
Можно следовать соглашению PHP ...
  Topic: Частные способы клонирования
Andrey Mindubaev

Replies: 49
Views: 49678

PostForum: Разное :: JavaScript   Posted: Fri Feb 15, 2008 2:37 am   Subject: Частные способы клонирования
Недавно нашёл очень интересный вариант:
function clone(object) {
function F() {};
F.prototype = object;
return new F();
}
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Fri Feb 15, 2008 1:43 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
AKS
Своей темой я в том числе хотел проверить, а в том ли направлении я иду. Очень жаль, что Вам всё равно.

dimagolov
Спасибо за пример (только это же существенно не отличается от самого первого кода в моём ответе Rumata)
В любом случае это не поможет при решении некоторых задач. Приведу пример:

Есть два объекта. Например два Object, у которых одно из свойств - это указатель на кнопку (на input type="button").
Первый объект по клику обрабатывает свои свойства и результат обработки отправляет на сервер, после получения ответа сервера выводит какую-то инфомацию.
Второй объект по клику обрабатывает свои свойства, выводит форму для корректировки пользователем и по нажатию на submit отправляет на сервер.
Тут я бы выделил общее у двух этих объектов, описал бы абстрактную сущность, затем описал бы две реализации этой абстрактной сущности (по одной на каждый объект)
Если делать по другому (т.е. не описывая сущности, то при добавлении в систему объекта с другим поведением могут воз ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Thu Feb 14, 2008 2:38 pm   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Zeroglif
О! Тяжёлая артилерия =)
Javascript - язык, где наследование реализовано через делегирование...
Это я уже давно понял (начитавшись Ваших же коментов здесь, на хабре и на винград.ру). Это очень здорово и открывает массу возможностей =)
prototype-based программирования - то это такая непереводимая игра слов в защиту javascript, направленная на борьбу со злобными аспидами, типа Andrey Mindubaev
Во! Это, кстати, тема (имхо, это камень в огород вашего стана нелюбителей классов). Я её попозже разовью =)
...пытается безграмотно
Скажите, пожалуйста, что такое "грамотно" в Вашем понимании

AKS
С другой стороны, конечно, пользоваться этим очень неудобно =) Чего только стоит конструкция вида:
Есть и другие способы.
Во! А приведите, хотябы два примера, пожалуйста (как я понял способов гораздо больше)

Zeroglif, AKS, Rumata, Андрей Сумин
Я предлагаю устроить какое-нибудь показательное выступление с участием заинтересованных сторон =)
Например, можно сделать какой-нибудь пок ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Thu Feb 14, 2008 2:41 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Rumata
Я скорее против самого принципа эмуляции того, что можно реализовать средствами самого языка
JavaScript, как язык, мне очень нравится. В процессе работы мне приходится писать как клиентскую, так и серверную часть и переключаться с JS на PHP иногда очень тяжело. Не хватает в основном Func.call(this, ...) и замыканий. JS даёт массу возможностей, самая главная из которых - это возможность подстроить язык под себя, придумывать удобные конструкции, которыми можно пользоваться !
Возможно, что прототипирование не самый лучший вариант, но язык реализован так и не иначе, и нам остается только пользоваться.
Прототипирование - это наоборот очень здорово ! Добавляем свойство в прототип функции-конструктора и оно становится доступным во всех объектах, построенных на её основе! Нам не "остаётся пользоваться", а нам просто необходимо этим пользоватся =)

С другой стороны, конечно, пользоваться этим очень неудобно =) Чего только стоит конструкция вида:
Func2.prototype = new Func1( ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Thu Feb 14, 2008 2:40 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Андрей Сумин
Кстати, а Вы не думали почему популярные либы делают псевдо class based наследование?
Я даже не задумывался над этим... Воспринимал это как само собой разумеющееся и задавал себе вопрос "так почему же этим не пользуются ?" =))
Так вот они это делают для Java разработчиков которые знают только class based наследование
Но это же хорошо, когда получается создать продукт сразу для нескольких секторов рынка + реализации псевдо классов - это в какой-то степени само-документация к фреймвёрку или даже к самому языку.
и в dojo и во всех остальных либах нет наследования которое работает "как в книжке".
А ведь и не получится никогда "как в книжке" (но может получится "почти как в PHP4" =)
Ксати если вы прочитали не только наблу но и тему форума про это наблу, то должны были знать что она не работает после 3 или 4 наследования
Я эту тему читал очень давно. Пришёл туда не со страницы наблы и читал только коменты про прототипы и конструкторы, а перед написанием первого сообщения ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Tue Feb 12, 2008 11:07 pm   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
WingedFox
Потому что это, как минимум, не работает...
var a = extend (function(){},{
run : function () {
alert(this.var1); // -> undefined
}
});
var b = extend (a,{
run : function () {
this.var1 = 1;
parent.run();
}
});
Кстати, если конструкции вида "q.prototype = new clazz;" - это "наследование полностью естественное", то у меня тоже прототипное наследование =) Я просто это называю классическим - и сущности a, b, c, d - это самые настоящие классы.

ЗЫЖ Пользуясь случаем выкладываю самую последнюю версию (больше выкладывать не буду, а то иначе получится, что моё решение вовсе не готовое =( Там попроще получилось - с этой оптимизацией я сам себя запутал =)
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Tue Feb 12, 2008 7:47 pm   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Андрей Сумин
О! Конкурирующая фирма =) Враги, блин, купили СмиЛинк и перекрыли нам доступ к пробкам... Ну да ладно - что было, то было =)

Все в рамках js... тоже без потыток
У меня такое ощущение, что тут все знают про рамки js, но никто не говорит (а может быть кто-то просто слышит звон, да не знает где он ?)
без оберток в оправдание своей некомпетентности в проектировании
Раз уж пошла такая пьянка, я сёдня програмулю напишу, который ваши скрипты лесенкой переформатирует (а то нечитаемо как-то)
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Mon Feb 11, 2008 11:39 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
AKS
Смотря что такое JS
Ну я говорю исключительно про JS, который в браузерах работает (в IE, FF, ИТД ну вы в курсе =)

к примеру в IE 5.0, вообще скрипт вызывает сообщения об ошибках
Я посчитал, что IE5 умер, убрал всякие расширерия по типу Function.prototype.apply = function() { ... } и теперь ориентируюсть на более новые браузеры: IE6, IE7, FF2, Opera9, Safari3
А вот в какой степени я не прав - хз (статистика li.ru говорит, что в рунете IE5 - это 0.8%)
Поставлю сегодня в VMWare более старые версии FF и Opera, прверю всё ли выглядит так как надо.

Не стоит равняться на prototype.js/base2.js...
Такого монстра, как прототайп я никогда не сделаю, да и нет такой задачи.
НО: могу взять функцию определения размера HTML-элемента; могу подсмотреть как реализован Template, могу взять RegExp-ы для разбора CSS правил в Selector и реализовать то, что нужно мне.
Dean Edwards - так вообще маньяк какой-то, с ним тягаться нереально.
Эти библиотеки, в основном, - источники идей и знаний. ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Mon Feb 11, 2008 1:38 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
AKS
Знаю только одну ссылку http://www.ecmascript.org/ (см. раздел "Interested in ECMAScript Edition 4?"). Классам в JS быть (правда непонятно когда)
А вообще, я не хочу с ним ссылками меряться =)

> как минимум, с "правильностью" не все в порядке, т.к. window.onunload ...
Именно по этому я и не "бравирую" своим "как бы фреймвёрком" (там не всё гладко). Сейчас это работает и это главное.

Мне приятно то, что Вам понравилось моё решение. Но мне всё таки очень хочется посмотреть решения людей, которых Вы считаете более опытными в области проектирования js-систем. Вы не могли бы дать ссылку (ссылки) ?

Rumata
Да я понимаю прекрасно, как гугла всё реализовано - у них серверная и клиентская часть очень сильно взаимосвязаны (я всегда считал, что у них на сервере что-то по типу http://code.google.com/webtoolkit/ (я могу ошибаться)). Я просто не могу привести другой пример (я хотел привести в пример объем задачи, а не конкретную реализацию)
Тем не менее не ясно, чем же Ваше реше ...
  Topic: Prototype-based наследования vs. эмуляции Class-based наследования
Andrey Mindubaev

Replies: 70
Views: 52498

PostForum: Разное :: JavaScript   Posted: Sun Feb 10, 2008 4:36 am   Subject: Prototype-based наследования vs. эмуляции Class-based наследования
Rumata
Да. Я не смог развивать первую версию карты Москвы. Я не смог нормально передать исходники для другого городского портала (внедрение проходило очень болезненно)
Мне пришлось всё переделать. Сейчас любое развитие происходит безболезненно и в любую сторону. Например, на этой неделе я сделал фичу, при помощи которой посетители могут отметить себя на карте города. Разработка заняла 4 дня (включая 1.5 дня - обсуждение поставленной задачи, окончательное оформление и ковыряние в носу)

Я упомянул Гугл только для того, чтобы показать "порядок сложности задачи". Вот Вы бы смогли сделать такой же интерфейс, как у GMail, не используя идеологию классов ?

AKS
Не Zeroglif-ом единым жив JavaScript. К тому же фраза выдрана из контекста !

Rumata, AKS
Я вас вообще не понимаю. У нас происходит разговор глухого с немым =(
Мне кажется, что вы за деревом не видите леса! У вас есть табу "нельзя реализовывать классы на JS потому что это прототип-ориентированный язык" и всё... тупик и дальш ...
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Mon Feb 04, 2008 1:20 am   Subject: Классическое наследование в JavaScript [обсуждение]
Ksnk

Скорее всего не "безумная идея" будет жить только на маленьких классах - на конкретных реализациях абстрактных.
Я её сделаю для себя в качестве функции объекта Inherit (там есть ещё один метод, который должен быть доступен извне - это Inherit.Extend)

Про префикс - это надо подумать (но Inherit.Extend не должен про это знать... он не для этих целей сделан). Может как-нибудь по проще можно реализовать.
Спасибо за идеи =)
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Sun Feb 03, 2008 1:45 am   Subject: Классическое наследование в JavaScript [обсуждение]
AKS
Спасибо за ликбез.
Параметр Context действительно не нужен (в этой функции и так был доступен как this)

Без apply, к сожалению обойтись будет нельзя, если не отказываться от синтаксиса "this.method.__parent()"
Такие методы действительно должны быть новыми объектами, у них должен быть свой метод __parent, в котором использовалось бы своё closure;

Ksnk
Первое нужно было, чтобы передать Method один раз в момент создания класса.

Я переделал VirtualMethod - теперь параметры не передаются (т.е. с замыканиями полегче стало) + в деструкторе сделал уничтожение этих методов (наверное не стоит верить garbage collector'ам и тем кто про них пишет =)
Не знаю будет ли это работать быстрее - может быть если переменные не объявляются и нет параметров, то замыкание и не создаётся.
Интересно, что быстрее - работа с переменными из замыкания или со свойствами this ?

VirtualMethod__parent: function() {
var oldMethod = this.__realMethod, Ret;
this.__realMeth ...
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Sat Feb 02, 2008 1:19 am   Subject: Классическое наследование в JavaScript [обсуждение]
AKS
как-раз в самом "сахаре" наследование отсутствует
Слишком приторный "сахарок" получается, накладный.
можно предположить, что memory leaks будут весьма ощутимы (пропорционально сложности).
+10
Спасибо за комент. Буду много думать (как говориться: "за что боролся, на то и напоролся")

Единственное, что я не понял - это про execution context, this value, this keyword, thisArg и неуместность Context.
Поясните мне то, что вы имели ввиду или отошлите меня в RTFM (только поточнее, если не сложно).

ЗЫЖ А принцип заберите пока обратно, оставьте только бритву Аккама.
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Fri Feb 01, 2008 5:41 pm   Subject: Классическое наследование в JavaScript [обсуждение]
Ksnk
К свойствам родительского класса можно обратиться только по цепочке прототипов. Т.е. никаких спец возможностей я не делал.
alert(vehicle.constructor.constructor.prototype.Messages); // => ''
Лучше всего это использовать как Read Only (так как работа идёт не с this, а с прототипом родительского класса)

ЗЫ Это относится ко всем свойствам и методам родительских классов.
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Fri Feb 01, 2008 4:22 pm   Subject: Классическое наследование в JavaScript [обсуждение]
Rumata
Я искренне считаю, что чем больше проект, тем больше необходимость в класс-ориентированном подходе.
Т.е. "Красота" имеет смысл для проектирования, для командной работы над проектами типа GMail, Google Reader, Google Documents & SpreadSheets и т.д.

AKS
Таки я вас уверяю, что наследование есть =)
alert(v1.Remember === v2.Remember]); // => true
Методы drive и __constructor - не совсем обычные. У каждого из них есть свойство-метод __parent.

Я ведь не ошибся ?
Всё правильно. В каждом таком методе в closure должны быть доступны "собственно исполнимый код" и "контекст выполнения". Исполняемый код "запоминается" при создании класса, а контекст - при создании объекта.
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Fri Feb 01, 2008 1:16 pm   Subject: Классическое наследование в JavaScript [обсуждение]
Ksnk
Да. Я всётаки думаю, что чем-то всё равно похоже (понятное дело, что не один-в-один и даже не на 90%)
TAncestor = class
private
protected
public
{Виртуальная процедура.}
procedure VirtualProcedure; virtual;
procedure StaticProcedure;
end;

TDescendant = class(TAncestor)
private
protected
public
{Перекрытие виртуальной процедуры.}
procedure VirtualProcedure; override;
procedure StaticProcedure;
end;

Поверьте мне, это работает =)
Вот реально работающий на этой основе проект: http://www.moskva.com/map/ - там глубина наследования в некоторых случаях больше, чем 3-4
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Fri Feb 01, 2008 12:19 pm   Subject: Классическое наследование в JavaScript [обсуждение]
В IE6 k никогда не будет равно "constructor"...
И ваш sugar в IE тоже не позволит кое-что, например создать метод toString для класса Zaporojets.
Это да, в этом методе, как и в valueOf пока не было необходимости. Решается так же как с конструктором. добавлением метода toString в Inherit.Class
toString: function() {
return this.__toString();
}
и добавлением "виртуального" метода __toString в Inherit.Class (чтобы можно быть вызывать this.__toString.__parent() в классах потомках)
__toString: function() {
return "";
}

Про FF: а у вас в FireBug не стоит опция Break on All Errors ?
  Topic: Классическое наследование в JavaScript [обсуждение]
Andrey Mindubaev

Replies: 20
Views: 17051

PostForum: Разное :: JavaScript   Posted: Fri Feb 01, 2008 9:39 am   Subject: Классическое наследование в JavaScript [обсуждение]
Rumata
Что кардинально нового в Вашей реализации классического ООП?
Насколько велики отличия от решения, предложенного Дмитрием Котеровым?
Мой вариант - это некий this.constructor.prototype.drive.call(this); и this.drive.__parent();

+ к тому в решении Дмитрия Котерова есть один момент:
var cname = "constructor";
for (var k in prop) {
if (k != cname) clazz.prototype[k] = prop[k];
}
В IE6 k никогда не будет равно "constructor"
if (prop[cname] && prop[cname] != Object)
clazz.constr = prop[cname];
А значение prop есть всегда.

Я считаю, что изучение работающего кода, содержащего ошибки, может привести к отрицательным результатам (в методологическом плане).
А ссылку на наблу номер 40 я видел очень много раз.

Чем Ваше лучше аналогичных решений, предложенных авторами jquery, prototype?
В jquery не реализована такая возможность, а вариант решения классиче ...
  Topic: Классическое наследование в JavaScript
Andrey Mindubaev

Replies: 1
Views: 9419

PostForum: Склад готовых решений :: JavaScript   Posted: Fri Feb 01, 2008 4:21 am   Subject: Классическое наследование в JavaScript
Доброго времени суток!

Предлагаю вашему вниманию мою реализацию классического наследования в JavaScript.
Отличительной особенностью является интуитивно понятный способ вызова функций родительского класса.

Ниже приведён пример (это переделанный Листинг 12 из Наблы номер 40):
var Car = Inherit.Reflect(Inherit.Class, {
Messages: "",

Remember: function(msg) {
this.Messages += "Вызван '" + msg + "'\n";
}
});
Inherit.Virtual(Car, {
__constructor: function() {
this.Remember("Конструктор Car()");
},
__destructor: function() {
this.Remember("Деструктор Car()");
},
drive: function() {
this.Remember("Метод Car.drive()");
}
});


var Zaporojets = Inherit.Reflect(Car, {
Report: function ...
 
Page 1 of 1 All times are GMT + 3 Hours
XML