Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> $script, в полку фреймворков прибыло. 
:(
    Опции темы
AKS
Дата 6.10.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  6.10.2007,  20:02 Найти цитируемый пост)
ты не мог бы развернуть мысль?

Ну привел же Ваш переделанный пример, в котором b копирует все "уровни". Или "уровни" - это что-то другое? 

PM MAIL   Вверх
AKS
Дата 6.10.2007, 20:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  6.10.2007,  13:36 Найти цитируемый пост)
в яваскрипте довольно дебильная объектная модель. я её исправляю как могу

 ->
Цитата(cruelangel @  6.10.2007,  20:02 Найти цитируемый пост)
фреймворки делают для удобства программирования, не для реализации невозможного.


Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие?

Цитата(cruelangel @  6.10.2007,  20:02 Найти цитируемый пост)
это (прототипы) одна из самых мощных особенностей данного языка. грех ею не воспользоваться. 

Пользуйтесь ради бога. Я написал о сомнительной ценности расширений в контексте вашего высказывания о том, что Вы "исправляете дебильную объектную модель". Т.е. на "исправления" это не тянет...

Добавлено @ 20:51
Цитата(cruelangel @  6.10.2007,  19:46 Найти цитируемый пост)
я вижу недостатки и по мере возможностей пытаюсь от них избавиться. ты же просто закрываешь на них глаза приговаривая "в багдаде всё спокойно, яваскрипт - совершенный язык".


Я никогда и нигде не писал о том, что "яваскрипт - совершенный язык". Однако я твердо убежден, что этот язык не заслуживает того, что о нем очень часто пишут те, кто в яваскрипт, как написал Zeroglif:
Цитата

...не видит связи со своей любимой книжкой про С++

Так вот очень многие, будучи не в состоянии провести параллели с привычным интерфейсом, начинают первым делом проклинать яваскрипт, а затем чудить, изобретая всякую всячину, которая на самом деле не нужна даже даром. В результате на свет появляются причудливые js-фреймворки. Но это еще полбеды. Некоторые потом начинают учить яваскрипт по этим самым писаниям. А потом так и говорят, например: "Я выучил яваскрипт через Dojo!". )))))))))))))))))))

Это сообщение отредактировал(а) AKS - 6.10.2007, 21:03
PM MAIL   Вверх
Zeroglif
Дата 6.10.2007, 21:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 1
Всего: 66



Цитата(cruelangel @  6.10.2007,  21:02 Найти цитируемый пост)
ты не мог бы развернуть мысль?

Давай я разверну эту мысль, поверил я в эту либу и решил клонировать с её помощью  примитивный такой массивчик:

Код

// беру массив, в котором есть массив, в котором есть массив
var a = [true, [true, [true]]];

// делаю его "глубокий" клон по рецепту cruelangel
var b = a.$clone(true);

// проверяю, похож ли клон на оригинал
alert(b); //-> [ false,[ false, [ false ] ] ]

// вроде чуток похож, проверю теперь, не потерял ли я исходный тип
alert([typeof b[0], typeof b[1][0], typeof b[1][1][0]]); //-> [ object, object, object ]


?




PM MAIL WWW   Вверх
cruelangel
Дата 6.10.2007, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> Ну привел же Ваш переделанный пример, в котором b копирует все "уровни". Или "уровни" - это что-то другое? 

я привёл пример, иллюстрирующий, что slice создаёт новый массив, каждый элемент которого ссылается на соответствующие значения исходного. это означает, что изменение элементов одного массива автоматически сказывается и на другом.


> Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие?

"дебильная" в моей фразе означает "неудобная и нелогичная"


> не видит связи со своей любимой книжкой про С++

ты меня с кем-то спутал. очевидно с создателями prototype.js с ихними классами в жабаскрипте.


Zeroglif, достаточно очевидно, что это не работает, потому, что соответствующий метод для Boolean ещё не перегружен. ты слишком многого хочешь от альфа-версии. впрочем, если перегрузить Boolean по аналогии с Number - всё работает. а на счёт изменения типа ты написал ещё на предыдущей странице, не стоит повторяться.

ps: вообще, довольно странно, что столь жаркие споры, доходящие до утверждений о бесполезности фреймворка, начались вокруг одного второстепенного метода smile

Это сообщение отредактировал(а) cruelangel - 6.10.2007, 23:14
PM MAIL   Вверх
AKS
Дата 7.10.2007, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
slice создаёт новый массив, каждый элемент которого ссылается на соответствующие значения исходного

Ну так и вложенным массивам - slice!

Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
"дебильная" в моей фразе означает "неудобная и нелогичная"

Так и надо было сразу писать. И  не было бы претензий:
Цитата

ты слишком многого хочешь от альфа-версии

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

Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
> не видит связи со своей любимой книжкой про С++

Видимо ниже этой цитаты я не раскрыл свою мысль до конца. Цитату привел как обобщение, характеризующее происходящее вокруг яваскрипт. А сама цитата действительно взята из темы, в которой народ упорно желал видеть в яваскрипт "Класс" и другие знакомые слова.

Цитата(cruelangel @  6.10.2007,  23:08 Найти цитируемый пост)
довольно странно, что столь жаркие споры ... начались вокруг одного второстепенного метода 

Я уже дал понять, вокруг чего и из-за чего начались "жаркие споры". Стало понятно это и Вам, раз Вы перефразировали написанное ранее. Не будь этого, мы бы с Вами уже продвинулись значительно дальше в глубь вашего сценария, забыв до бэты про этот второстепенный метод...

PM MAIL   Вверх
cruelangel
Дата 7.10.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



боюсь претензии были бы в любом случае smile

обновил сабж. теперь $clone работает правильно.
PM MAIL   Вверх
AKS
Дата 7.10.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  7.10.2007,  14:01 Найти цитируемый пост)
боюсь претензии были бы в любом случае 

Не-а! С какой стати? Вопросы-расспросы, замечания-предложения - это возможно (если, конечно, моих, к примеру, знаний на это хватит). Но какие могут быть претензии?

Вот например, возвращаясь все к тому же $clone, могу сказать, что использование $each сильно тормозит процедуру клонирования. Если обходится простым присваиванием вместо вызова функции для каждого поля объекта, получится солидная экономия...

PM MAIL   Вверх
cruelangel
Дата 7.10.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> какие могут быть претензии?

уж не знаю.. это ты заговорил о притензиях - тебе виднее smile


> Если обходится простым присваиванием вместо вызова функции 

так и происходит при использовании одноуровневого клонирования $clone( false ).
PM MAIL   Вверх
cruelangel
Дата 7.10.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



PM MAIL   Вверх
AKS
Дата 8.10.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 2
Всего: 52



Цитата(cruelangel @  7.10.2007,  19:55 Найти цитируемый пост)
так и происходит при использовании одноуровневого клонирования $clone( false ). 

Нет, все не так.
1. Метод $clone вызывает метод $each.
2. Метод $each на каждой итерации for in вызывает функцию.
3. Функция на каждой итерации вызывается в текущем контексте, используя для этого метод apply.
Все это происходит не зависимо от глубины клонирования. Именно эти три этапа я и предложил Вам заменить на один - операцию присваивания.
PM MAIL   Вверх
Zeroglif
Дата 8.10.2007, 12:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 1
Всего: 66



Цитата(cruelangel @  7.10.2007,  00:08 Найти цитируемый пост)
довольно странно, что столь жаркие споры, доходящие до утверждений о бесполезности фреймворка, начались вокруг одного второстепенного метода

Понимаешь, брать неоткоментированную либу и разбирать в ней каждую строчку - слишком жирно получится, достаточно уже посмотреть 2-3 куска, чтобы составить представление о качестве, несмотря даже на альфавость версии.  Ты вообще не контролируешь тип значений, переопределяшь зачем-то по кругу методы, несмотря на наследование, экстенсивно расширяешь нативные прототипы, что уже настораживает,  особенно в свете работы нескольких фреймворков рядом, переопределяешь ради "красоты" алерта важнейший метод toString, логика некоторых функций или отжигает, или несёт в себе неизвестный глубокий смысл и т.д. и т.п. На таком уровне развития imho этот фреймворк вряд ли будет кому-то сильно полезен. Доводи код до нужной кондиции и получишь тёплый приём.  smile 


Цитата(cruelangel @  7.10.2007,  15:01 Найти цитируемый пост)
обновил сабж. теперь $clone работает правильно

Не знаю, что на твоём языке означает "правильно", но метод $clone как работал никак, так и продолжает работать никак. При deep-клонировании объекты "подтипа" Function не отсекаются на подходе со всеми вытекающими последствиями, объекты "подтипов" Boolean, Number, String не клонируются (только копируется значение - ссылка на объект), про прочие "подтипы" пока ничего не слышно, значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются (ничего себе клонирование), при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется, оно же игнорируется и при нестрогом равенстве значению ненаследуемого свойства (например, для конструктор.prototype, хотя какая связь?), разреженный массив теряет значение  length оригинала, при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop...
PM MAIL WWW   Вверх
cruelangel
Дата 8.10.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



AKS, не, я против такого размывания функционала: ручное итерирование в каждом методе лишь бы выиграть пару тактов процессора + необходимость перегружать соответствующие функции в потомках.
например, сейчас array от object отличается лишь способом итерирования (метод $each), остальные методы объекта используя этот метод работают и в массиве. при ручном итерировании в каждом методе, пришлось бы каждый метод объекта переписать и для массива.


Это сообщение отредактировал(а) cruelangel - 8.10.2007, 12:11
PM MAIL   Вверх
cruelangel
Дата 8.10.2007, 12:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> брать неоткоментированную либу и разбирать в ней каждую строчку

там довольно короткие и достаточно понятные методы. писать прямо перед фразой на яваскрипт ту же самую фразу на английском - на мой взгляд достаточно глупо.


> переопределяшь зачем-то по кругу методы, несмотря на наследование

уже нет


> экстенсивно расширяешь нативные прототипы, что уже настораживает

что в этом плохого?


> переопределяешь ради "красоты" алерта важнейший метод toString

ты так и не рассказал, почему его не стоит перегружать...


> несёт в себе неизвестный глубокий смысл

о каких функциях идёт речь?

> объекты "подтипов" Boolean, Number, String не клонируются
Код
var a= new Number( 5 );
a.b= 'qwe';
var c= a.$clone();
a.d= 'rty';
alert( [c, c.b, c.d] ); // [ 5, qwe ]



> значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются

null и undefined - это отсутствие данных. незачем их "клонировать".


> при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется

поправил, спасибо


> разреженный массив теряет значение  length оригинала, при клонировании объекта со свойством

всё правильно, length по логике должно быть равно количеству элементов, а не просто абстрактной "верхней границей".


> при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop

маловероятно, чтобы такой объект требовалось клонировать, а добавлять проверку на циклические ссылки - довольно накладно...


Это сообщение отредактировал(а) cruelangel - 8.10.2007, 12:43
PM MAIL   Вверх
Zeroglif
Дата 8.10.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 1
Всего: 66



Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
прямо перед фразой на яваскрипт ту же самую фразу на английском - на мой взгляд достаточно глупо

Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано", "эти значения не предполагалось клонировать" и т.п.

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
что в этом плохого?

Для тебя может и ничего, для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты - ничего хорошего, вспоминая, что такое делегирование/наследование.

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
ты так и не рассказал, почему его не стоит перегружать...

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

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
о каких функциях идёт речь?

Ну, допустим $proto $each $haskey $clone

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
alert( [c, c.b, c.d] ); // [ 5, qwe ]

Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта:

Код

$number.$clone= function( deep ){
    return this;
};


Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
null и undefined - это отсутствие данных. незачем их "клонировать".

Тогда и ноль туда же и пустую строку... весёлый клон получится, null часто используется для осознанного закрытия слота (подготовка под будущее объектное значение и т.п.), то есть null, как правило кладут со смыслом или DOM это возвращает, что тоже несёт смысл, а ты его отвергаешь, лишая объект свойства, заведомо существующего у оригинала.

Цитата(cruelangel @  8.10.2007,  13:32 Найти цитируемый пост)
всё правильно, length по логике должно быть равно количеству элементов

У javascript другая логика, свойство length может существовать как зависимо, так и независимо, а учитывая то, что само это свойство прямо влияет на массив, хорош будет тот клон с другой длиной. Остаётся только домыслить, как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить...


PM MAIL WWW   Вверх
cruelangel
Дата 8.10.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 1
Всего: 8



> Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано",

нет смысла идеологию фреймворка напоминать перед каждой функцией. для этого предназначена документация, которая будет чуть позже.


> для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты

опыт проторайпажс ико показывает, что это не вызывает проблем.


> этом программист может строить расчёт

что-то типа if( [1,2,3] == '1,2,3' ) ? smile


> $proto $each $haskey $clone

а из кода не очевидно что они делают? 


> Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта:

почисти кэш


> Тогда и ноль туда же и пустую строку...

нет, ноль, не смотря на одинаковое название, является числом, а пустая строка - строкой не содержащей символов. а вот null - это именно отсутствие данных. также как и undefined. просто в первом случае "данные были стёрты", а во втором "данные небыли внесены".
да, в каком-нибудь подтипе $haskey может быть перегружен в результате чего, например, пустая строка или числа меньше нуля не будут учавствовать в итерировании, гарантируя определённый вид данных передаваемых колбэку.


> то есть null, как правило кладут со смыслом

и этот смысл - стирание данных. нет смысла "отсутствию данных" учавствовать в итерировании.
Код
var a= [1,2,3,4];
a[2]= null;
var b= '';
for( var i=0; i<a.length; ++i ){
    b=+ a[i].toString();
}
alert( b );
 этот код выдаёт ошибку, потому, что для правильного итерирования разреженного массива нужно делать дополнительные проверки на отсутствие значения.


> как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить

эт ты о чём?

Это сообщение отредактировал(а) cruelangel - 8.10.2007, 14:25
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.