Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   своё замыкание каждому объекту. (https://javascript.ru/forum/misc/12103-svojo-zamykanie-kazhdomu-obektu.html)

tenshi 04.10.2010 22:49

тут вот у меня описывается ObjectHash, позволяющий в качестве ключей использовать объекты: http://javascript.ru/blog/tenshi/yavascriptovoe-dao

tenshi 04.10.2010 23:02

а вообще, сабж элементарно делается так:

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

cainrus 13.10.2010 06:04

2tenshi:
github( не могу в нём освоиться ещё.. ) не открывает ссылки, да и вообще, я мог бы давно уже воспользоваться дополнительными сторонними библиотеками или просто использовать более тяжёлые решения.

Пришла идея, добавлять через eval при создании массива функцию(например, geUid), которая будет возвращать уникальный идентификатор.
Функцию geUid хорошо бы держать внутри метода .key возвращающего ключ( [1,2,3].key() ), чтобы не захламлять внутреннее пространство объекта массива внутренне-вспомогательными методами(geUid). Тогда придется генерировать весь метод key при создании нового массива.

Понравилась идея про выделение объекта итератора из самого массива как отдельную сущность. Попробую осуществить каким-нибудь простым способом.. Эта идея избавляет меня от многих проблем описанных в топике( и посте ), а также от раздутия новыми методами объекта массива. Ну, начну играть с кодом :write:

tenshi 13.10.2010 12:36

поправил ссылки. это не библиотеки. это пара маленьких функций.

cainrus 22.10.2010 06:10

Вот то что получилось в итоге:

Array.iterator.js

оформил как плагин под mootools,
если кто может посмотреть и сказать где плохо, грязно, некрасиво, криво, буду рад исправить.

демо алгоримта работы в виде галереи.
и маленькое описание.

tenshi 22.10.2010 13:56

я бы сделал next и prev алиасами для slide со значением 1 по умолчанию и вычитанием из нуля в случае prev. не хватает метода count. возможности указывать смещение для jump не только сначала массива, но и с конца (отрицательным значением). неплохо было бы иметь возможность итерироваться не по всему массиву, а только по его диапазону. например: [1,2,3,4,5].iterator( range: [ 1, -1 ] ) // будет итерировать только с 2 по 4, по умолчанию range=[ 0, 0 ] то есть итерирование по всему массиву

tenshi 22.10.2010 14:01

почему ты хранишь текущий ключ не в итераторе, а в глобальном реестре?

tenshi 22.10.2010 14:02

аналогично со ссылкой на массив - зачем хранить её в замыкании?

tenshi 22.10.2010 14:06

зачем в slide регулярка? достаточно просто привести к типу Number

cainrus 23.10.2010 03:20

tenshi,

Ссылка на массив защищена в замыкании, потому что массив рождает итератор не позволяя потомку(итератору) переопределить ссылку с себя на другой массив.
Массив может иметь несколько итераторов, а не наоборот.

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

Эти 2 замыкания помогут избежать ошибок.

Диапазон итерирования был оставлен как домашнее задания для самого себя же в секции TODO скрипта))

Зачем нужен метод "count"? он ведь не относится к итерации.


Часовой пояс GMT +3, время: 16:33.