Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 30.01.2010, 10:38
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

или получить в глаз
Ответить с цитированием
  #42 (permalink)  
Старый 30.01.2010, 11:16
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Вариант, но не факт, что от этого перепишутся готовые либы
Ответить с цитированием
  #43 (permalink)  
Старый 30.01.2010, 20:56
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от e1f
Вы еще маме того стороннего разработчика пойдите нажалуйтесь. Ну как ребенок, честно
причем тут ребенок? мне вообще чхать на того кто так пишет. я лично если вижу такой код, то с таким сайтом дело не имею. раз.
Сообщение от e1f
как на уже готовый сайт добавить новый функционал, не переделывая старый под угрозой получения в глаз.
Если сайт написан так как описал Колай, в глаз вы получите полюбому как не крути. два.

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

Последний раз редактировалось PeaceCoder, 30.01.2010 в 20:59.
Ответить с цитированием
  #44 (permalink)  
Старый 30.01.2010, 21:42
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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

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

P.S. Коляй, кстати )))
Ответить с цитированием
  #45 (permalink)  
Старый 30.01.2010, 21:54
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

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

П.С. к библитечке не имею притензий.
Ответить с цитированием
  #46 (permalink)  
Старый 30.01.2010, 22:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от PeaceCoder
в этом и проблема. это одна "фича" сайта. а если пол сайта? сколько времени вы убьете что бы исправить за пару минут одну из "фич" ?
Мне за это деньги платят, чтобы мой скрипт работал на таких вот кривых сайтах, владельцы которых платят деньги за использование этого скрипта. Так что лично у меня претензий нет В конце концов это, как минимум, интересно: найти баг на сайте, который сам по себе работает нормально, но твой скрипт на нем не работает, при этом доступа к сайту ты не имеешь.
Ответить с цитированием
  #47 (permalink)  
Старый 04.02.2010, 03:34
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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: по поводу более важных замечаний... вынес в отдельную тему

Последний раз редактировалось x-yuri, 04.02.2010 в 05:23.
Ответить с цитированием
  #48 (permalink)  
Старый 04.02.2010, 13:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от 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;
    }
}));


Читабельность данной функции меня самого не радует, но пока не придумал, как лучше переписать.
Ответить с цитированием
  #49 (permalink)  
Старый 04.02.2010, 15:36
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от 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
Читабельность данной функции меня самого не радует, но пока не придумал, как лучше переписать
а идеи из соседней темы тебе не нравятся?
Ответить с цитированием
  #50 (permalink)  
Старый 04.02.2010, 16:08
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск