тут вот у меня описывается ObjectHash, позволяющий в качестве ключей использовать объекты: http://javascript.ru/blog/tenshi/yavascriptovoe-dao
|
а вообще, сабж элементарно делается так:
Object.prototype.key= function(){ return ( this.key= FProp( 0 ) ).apply( this, arguments ) } http://github.com/sairi-na-tenshi/wc...ster//FProp.js http://github.com/sairi-na-tenshi/wc...ster//FPoly.js |
2tenshi:
github( не могу в нём освоиться ещё.. ) не открывает ссылки, да и вообще, я мог бы давно уже воспользоваться дополнительными сторонними библиотеками или просто использовать более тяжёлые решения. Пришла идея, добавлять через eval при создании массива функцию(например, geUid), которая будет возвращать уникальный идентификатор. Функцию geUid хорошо бы держать внутри метода .key возвращающего ключ( [1,2,3].key() ), чтобы не захламлять внутреннее пространство объекта массива внутренне-вспомогательными методами(geUid). Тогда придется генерировать весь метод key при создании нового массива. Понравилась идея про выделение объекта итератора из самого массива как отдельную сущность. Попробую осуществить каким-нибудь простым способом.. Эта идея избавляет меня от многих проблем описанных в топике( и посте ), а также от раздутия новыми методами объекта массива. Ну, начну играть с кодом :write: |
поправил ссылки. это не библиотеки. это пара маленьких функций.
|
Вот то что получилось в итоге:
Array.iterator.js оформил как плагин под mootools, если кто может посмотреть и сказать где плохо, грязно, некрасиво, криво, буду рад исправить. демо алгоримта работы в виде галереи. и маленькое описание. |
я бы сделал next и prev алиасами для slide со значением 1 по умолчанию и вычитанием из нуля в случае prev. не хватает метода count. возможности указывать смещение для jump не только сначала массива, но и с конца (отрицательным значением). неплохо было бы иметь возможность итерироваться не по всему массиву, а только по его диапазону. например: [1,2,3,4,5].iterator( range: [ 1, -1 ] ) // будет итерировать только с 2 по 4, по умолчанию range=[ 0, 0 ] то есть итерирование по всему массиву
|
почему ты хранишь текущий ключ не в итераторе, а в глобальном реестре?
|
аналогично со ссылкой на массив - зачем хранить её в замыкании?
|
зачем в slide регулярка? достаточно просто привести к типу Number
|
tenshi,
Ссылка на массив защищена в замыкании, потому что массив рождает итератор не позволяя потомку(итератору) переопределить ссылку с себя на другой массив. Массив может иметь несколько итераторов, а не наоборот. Ключ храню в замыкании, потому что он всегда должен обеспечивать точные данные, которые можно было бы случайно подменить, если не скрыть его, а оставить внутри итератора как свойство объекта. Замыкание глобальное для всех итераторов, чтобы съэкономить ресурсы, если вздумается создать сотенку итераторов. Эти 2 замыкания помогут избежать ошибок. Диапазон итерирования был оставлен как домашнее задания для самого себя же в секции TODO скрипта)) Зачем нужен метод "count"? он ведь не относится к итерации. |
Часовой пояс GMT +3, время: 16:33. |