Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Библиотечка . (https://javascript.ru/forum/project/6025-bibliotechka.html)

x-yuri 30.01.2010 10:38

или получить в глаз ;)

e1f 30.01.2010 11:16

:) Вариант, но не факт, что от этого перепишутся готовые либы ;)

PeaceCoder 30.01.2010 20:56

Цитата:

Сообщение от e1f
Вы еще маме того стороннего разработчика пойдите нажалуйтесь. Ну как ребенок, честно

причем тут ребенок? мне вообще чхать на того кто так пишет. я лично если вижу такой код, то с таким сайтом дело не имею. раз.
Цитата:

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

Если сайт написан так как описал Колай, в глаз вы получите полюбому как не крути. два.

или ТРИ. Выловить начало перекрытия стандартных методов и занести их в переменнные свои. Но это как говорится будет каша в коде и с каждым новым изменением сайт будет... короче сайтом должен заниматься Первый разработчик.

Kolyaj 30.01.2010 21:42

Цитата:

Сообщение от PeaceCoder
Если сайт написан так как описал Колай, в глаз вы получите полюбому как не крути. два.

Ну почему же. У меня на решение вышеописанной проблемы ушло полторы минуты после того, как нашёл за полтора часа :) Потому что у меня в данном скрипте свои функции, которые я знаю, каким образом можно переписывать. Если бы использовалась jQuery, то она бы покрылась слоем костылей.

Цитата:

Сообщение от PeaceCoder
Выловить начало перекрытия стандартных методов и занести их в переменнные свои.

Невозможно.

Но ещё раз повторю, данная библиотечка к тому скрипту отношения не имеет, там весь код заточен под конкретную задачу.

P.S. Коляй, кстати )))

PeaceCoder 30.01.2010 21:54

Цитата:

Сообщение от Kolyaj
ушло полторы минуты после того, как нашёл за полтора часа

в этом и проблема. это одна "фича" сайта. а если пол сайта? сколько времени вы убьете что бы исправить за пару минут одну из "фич" ?

П.С. к библитечке не имею притензий.

Kolyaj 30.01.2010 22:11

Цитата:

Сообщение от PeaceCoder
в этом и проблема. это одна "фича" сайта. а если пол сайта? сколько времени вы убьете что бы исправить за пару минут одну из "фич" ?

Мне за это деньги платят, чтобы мой скрипт работал на таких вот кривых сайтах, владельцы которых платят деньги за использование этого скрипта. Так что лично у меня претензий нет :) В конце концов это, как минимум, интересно: найти баг на сайте, который сам по себе работает нормально, но твой скрипт на нем не работает, при этом доступа к сайту ты не имеешь.

x-yuri 04.02.2010 03:34

function $$(selector, options) {
...
var value = typeof options.map == 'function' ? options.map.call(options.scope, el, [B]j++[/B]) : el;
...
reduceValue = reduceInitialized ? options.reduce.call(options.scope, reduceValue, value, [B]j++[/B]) : value;

а это так и надо?

UPD: и почему такой странное поведение с options.reduce: "Если параметр reduceInit не указан, то для первого найденного элемента reduce не вызывается." Можно какие-нибудь примеры использования?

UPD 2: по поводу более важных замечаний... вынес в отдельную тему

Kolyaj 04.02.2010 13:00

Цитата:

Сообщение от x-yuri
а это так и надо?

Это баг, спасибо.

Цитата:

Сообщение от x-yuri
"Если параметр reduceInit не указан, то для первого найденного элемента reduce не вызывается."

Если reduceInit не указан, то им становится первый элемент. Это стандартное поведение.

Цитата:

Сообщение от x-yuri
Можно какие-нибудь примеры использования?

Использования reduce? Искусственный пример: сумма значений всех input[type=text] на странице (не запускал)
alert($$('input', {
    filter: function(el) {
        return el.type == 'text';
    },
    map: function(el) {
        return parseInt(el.value) || 0;
    },
    reduce: function(sum, value) {
        return sum + value;
    }
}));


Читабельность данной функции меня самого не радует, но пока не придумал, как лучше переписать.

x-yuri 04.02.2010 15:36

Цитата:

Сообщение от Kolyaj
Использования reduce? Искусственный пример: сумма значений всех input[type=text] на странице (не запускал)

а, т.е. сначала мэппим элементы в значения... Имхо, лучше всегда вызывать для каждого элемента, т.е. что-то типа
alert($$('input', {
    filter: function(el) {
        return el.type == 'text';
    },
    reduce: function(sum, el) {
        return sum + parseInt(el.value) || 0;
    }
}));

может и реализация проще станет

Цитата:

Сообщение от Kolyaj
Читабельность данной функции меня самого не радует, но пока не придумал, как лучше переписать

а идеи из соседней темы тебе не нравятся?

Kolyaj 04.02.2010 16:08

Цитата:

Сообщение от x-yuri
Имхо, лучше всегда вызывать для каждого элемента, т.е. что-то типа

Для такого случая как раз нужно указывать reduceInit: 0, т.к. иначе в первой итерации sum будет равна ссылке на элемент. По сути можно и условие из filter туда же засунуть, это на любителя, я предпочитаю разбивать задачи на более мелкие более простые подзадачи.

Цитата:

Сообщение от x-yuri
а идеи из соседней темы тебе не нравятся?

Это библиотечка, т.е. код с высокой реюзабельностью, поэтому для данного кода я ищу компромисс "эффективность кода -- максимально малый размер -- приемлемая читабельность" (в порядке убывания важности). Твой первый вариант без документации больше, чем мой с документацией. Со вторым вариантом проблема другая: там нужно сначала преобразовать NodeList в массив (раз проход), применить filter (два проход), применить map (три проход), reduce (четыре проход). (Хотя от первого прохода можно избавиться.) А эта функция для того и писалась, чтобы можно было выдернуть любую (почти) информацию из DOM-дерева за один проход.


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