![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
||||
|
||||
AKS |
|
||||||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
->
Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие?
Пользуйтесь ради бога. Я написал о сомнительной ценности расширений в контексте вашего высказывания о том, что Вы "исправляете дебильную объектную модель". Т.е. на "исправления" это не тянет... Добавлено @ 20:51 Я никогда и нигде не писал о том, что "яваскрипт - совершенный язык". Однако я твердо убежден, что этот язык не заслуживает того, что о нем очень часто пишут те, кто в яваскрипт, как написал Zeroglif:
Так вот очень многие, будучи не в состоянии провести параллели с привычным интерфейсом, начинают первым делом проклинать яваскрипт, а затем чудить, изобретая всякую всячину, которая на самом деле не нужна даже даром. В результате на свет появляются причудливые js-фреймворки. Но это еще полбеды. Некоторые потом начинают учить яваскрипт по этим самым писаниям. А потом так и говорят, например: "Я выучил яваскрипт через Dojo!". ))))))))))))))))))) Это сообщение отредактировал(а) AKS - 6.10.2007, 21:03 |
||||||||
|
|||||||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Давай я разверну эту мысль, поверил я в эту либу и решил клонировать с её помощью примитивный такой массивчик:
? |
|||
|
||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Ну привел же Ваш переделанный пример, в котором b копирует все "уровни". Или "уровни" - это что-то другое?
я привёл пример, иллюстрирующий, что slice создаёт новый массив, каждый элемент которого ссылается на соответствующие значения исходного. это означает, что изменение элементов одного массива автоматически сказывается и на другом. > Ну так все же Вы исправляете "дебильную объектную модель яваскрипт", или пишете для своего удобства и в свое удовольствие? "дебильная" в моей фразе означает "неудобная и нелогичная" > не видит связи со своей любимой книжкой про С++ ты меня с кем-то спутал. очевидно с создателями prototype.js с ихними классами в жабаскрипте. Zeroglif, достаточно очевидно, что это не работает, потому, что соответствующий метод для Boolean ещё не перегружен. ты слишком многого хочешь от альфа-версии. впрочем, если перегрузить Boolean по аналогии с Number - всё работает. а на счёт изменения типа ты написал ещё на предыдущей странице, не стоит повторяться. ps: вообще, довольно странно, что столь жаркие споры, доходящие до утверждений о бесполезности фреймворка, начались вокруг одного второстепенного метода ![]() Это сообщение отредактировал(а) cruelangel - 6.10.2007, 23:14 |
|||
|
||||
AKS |
|
||||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Ну так и вложенным массивам - slice! Так и надо было сразу писать. И не было бы претензий:
От альфа-версии никто ничего не хочет. Хочется, чтобы в голове не возникало мыслей, вроде: "Что он имел ввиду - придумано дебилами или придумано для дебилов?". Сами же пошли на конфронтацию. Видимо ниже этой цитаты я не раскрыл свою мысль до конца. Цитату привел как обобщение, характеризующее происходящее вокруг яваскрипт. А сама цитата действительно взята из темы, в которой народ упорно желал видеть в яваскрипт "Класс" и другие знакомые слова.
Я уже дал понять, вокруг чего и из-за чего начались "жаркие споры". Стало понятно это и Вам, раз Вы перефразировали написанное ранее. Не будь этого, мы бы с Вами уже продвинулись значительно дальше в глубь вашего сценария, забыв до бэты про этот второстепенный метод... |
||||||
|
|||||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
боюсь претензии были бы в любом случае
![]() обновил сабж. теперь $clone работает правильно. |
|||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Не-а! С какой стати? Вопросы-расспросы, замечания-предложения - это возможно (если, конечно, моих, к примеру, знаний на это хватит). Но какие могут быть претензии? Вот например, возвращаясь все к тому же $clone, могу сказать, что использование $each сильно тормозит процедуру клонирования. Если обходится простым присваиванием вместо вызова функции для каждого поля объекта, получится солидная экономия... |
|||
|
||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> какие могут быть претензии?
уж не знаю.. это ты заговорил о притензиях - тебе виднее ![]() > Если обходится простым присваиванием вместо вызова функции так и происходит при использовании одноуровневого клонирования $clone( false ). |
|||
|
||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
||||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 2 Всего: 52 |
Нет, все не так. 1. Метод $clone вызывает метод $each. 2. Метод $each на каждой итерации for in вызывает функцию. 3. Функция на каждой итерации вызывается в текущем контексте, используя для этого метод apply. Все это происходит не зависимо от глубины клонирования. Именно эти три этапа я и предложил Вам заменить на один - операцию присваивания. |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Понимаешь, брать неоткоментированную либу и разбирать в ней каждую строчку - слишком жирно получится, достаточно уже посмотреть 2-3 куска, чтобы составить представление о качестве, несмотря даже на альфавость версии. Ты вообще не контролируешь тип значений, переопределяшь зачем-то по кругу методы, несмотря на наследование, экстенсивно расширяешь нативные прототипы, что уже настораживает, особенно в свете работы нескольких фреймворков рядом, переопределяешь ради "красоты" алерта важнейший метод toString, логика некоторых функций или отжигает, или несёт в себе неизвестный глубокий смысл и т.д. и т.п. На таком уровне развития imho этот фреймворк вряд ли будет кому-то сильно полезен. Доводи код до нужной кондиции и получишь тёплый приём. ![]() Не знаю, что на твоём языке означает "правильно", но метод $clone как работал никак, так и продолжает работать никак. При deep-клонировании объекты "подтипа" Function не отсекаются на подходе со всеми вытекающими последствиями, объекты "подтипов" Boolean, Number, String не клонируются (только копируется значение - ссылка на объект), про прочие "подтипы" пока ничего не слышно, значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются (ничего себе клонирование), при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется, оно же игнорируется и при нестрогом равенстве значению ненаследуемого свойства (например, для конструктор.prototype, хотя какая связь?), разреженный массив теряет значение length оригинала, при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop... |
|||
|
||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
AKS, не, я против такого размывания функционала: ручное итерирование в каждом методе лишь бы выиграть пару тактов процессора + необходимость перегружать соответствующие функции в потомках.
например, сейчас array от object отличается лишь способом итерирования (метод $each), остальные методы объекта используя этот метод работают и в массиве. при ручном итерировании в каждом методе, пришлось бы каждый метод объекта переписать и для массива. Это сообщение отредактировал(а) cruelangel - 8.10.2007, 12:11 |
|||
|
||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> брать неоткоментированную либу и разбирать в ней каждую строчку
там довольно короткие и достаточно понятные методы. писать прямо перед фразой на яваскрипт ту же самую фразу на английском - на мой взгляд достаточно глупо. > переопределяшь зачем-то по кругу методы, несмотря на наследование уже нет > экстенсивно расширяешь нативные прототипы, что уже настораживает что в этом плохого? > переопределяешь ради "красоты" алерта важнейший метод toString ты так и не рассказал, почему его не стоит перегружать... > несёт в себе неизвестный глубокий смысл о каких функциях идёт речь? > объекты "подтипов" Boolean, Number, String не клонируются
> значения null и undefined по какой-то причине за значения вообще не считаются и игнорируются null и undefined - это отсутствие данных. незачем их "клонировать". > при нестрогом равенстве значения собственного свойства значению наследуемого свойства собственное свойство также игнорируется поправил, спасибо > разреженный массив теряет значение length оригинала, при клонировании объекта со свойством всё правильно, length по логике должно быть равно количеству элементов, а не просто абстрактной "верхней границей". > при клонировании объекта со свойством, значением которого является сам клонируемый объект, скрипт улетает в loooooooop маловероятно, чтобы такой объект требовалось клонировать, а добавлять проверку на циклические ссылки - довольно накладно... Это сообщение отредактировал(а) cruelangel - 8.10.2007, 12:43 |
|||
|
||||
Zeroglif |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано", "эти значения не предполагалось клонировать" и т.п. Для тебя может и ничего, для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты - ничего хорошего, вспоминая, что такое делегирование/наследование. Потому что его поведение предопределено, документировано и увязано со многими операциями, на этом программист может строить расчёт, а у тебя самодеятельность, начиная от того, что алерт пишет самопал, конвертация объектов самопальная и т.д. и т.п. Ну, допустим $proto $each $haskey $clone Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта:
Тогда и ноль туда же и пустую строку... весёлый клон получится, null часто используется для осознанного закрытия слота (подготовка под будущее объектное значение и т.п.), то есть null, как правило кладут со смыслом или DOM это возвращает, что тоже несёт смысл, а ты его отвергаешь, лишая объект свойства, заведомо существующего у оригинала.
У javascript другая логика, свойство length может существовать как зависимо, так и независимо, а учитывая то, что само это свойство прямо влияет на массив, хорош будет тот клон с другой длиной. Остаётся только домыслить, как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить... |
||||||||
|
|||||||||
cruelangel |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 1 Всего: 8 |
> Ты сейчас комментируешь свою либу, только уже здесь на форуме вроде "это здесь и не надо было", "тут так и задумано",
нет смысла идеологию фреймворка напоминать перед каждой функцией. для этого предназначена документация, которая будет чуть позже. > для тех, кто ждёт от либы универсальности, неконфликтности, предсказуемости и простоты опыт проторайпажс ико показывает, что это не вызывает проблем. > этом программист может строить расчёт что-то типа if( [1,2,3] == '1,2,3' ) ? ![]() > $proto $each $haskey $clone а из кода не очевидно что они делают? > Это ты написал сходу или протестировал, посмотри внимательнее на функцию и найди в ней создание нового объекта: почисти кэш > Тогда и ноль туда же и пустую строку... нет, ноль, не смотря на одинаковое название, является числом, а пустая строка - строкой не содержащей символов. а вот null - это именно отсутствие данных. также как и undefined. просто в первом случае "данные были стёрты", а во втором "данные небыли внесены". да, в каком-нибудь подтипе $haskey может быть перегружен в результате чего, например, пустая строка или числа меньше нуля не будут учавствовать в итерировании, гарантируя определённый вид данных передаваемых колбэку. > то есть null, как правило кладут со смыслом и этот смысл - стирание данных. нет смысла "отсутствию данных" учавствовать в итерировании.
> как ты обрабатываешь массив и его клон в паре по единой логике, и что там можно наворотить эт ты о чём? Это сообщение отредактировал(а) cruelangel - 8.10.2007, 14:25 |
|||
|
||||
![]() ![]() ![]() |
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |