Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отложить вызов функции на 1 сек, после того как пользователь ввел текст 
V
    Опции темы
Zeroglif
Дата 26.7.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



AKS

ОК... я могу легко снять брюзжание по поводу непредсказуемости IE, не могу сформулировать точно, поэтому снимаю. Если формулировать в стиле бла-бла-бла, то хостовые методы живут своей жизнью плюс у IE судя по всему оригинальная реализация глобального объекта (он как бы двоится), отсюда возможные сюрпризы при присваивании ссылки на эти методы переменным или их замене на что-то своё. Несмотря на это стоит заметить, что не вы один пытаетесь сэмулировать setTimeout, есть ещё один и ещё один... это хорошо, значит, они тоже тестировали и тоже пришли к позитивному выводу, это радует...  smile 
PM MAIL WWW   Вверх
smartov
Дата 26.7.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Я не совсем понимаю зачем вы устроили споры по поводу дороговизны реализации setTimeout для веб-девелоперов всех стран, если есть кросбраузерный вариант, который уже давно подсказал SelenIT.

Это сообщение отредактировал(а) smartov - 26.7.2007, 14:08
PM MAIL   Вверх
Zeroglif
Дата 26.7.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



smartov

создавать 2 дополнительных функции и делать 1 дополнительный вызов только ради того, чтобы удержать в руках ссылку на текущий объект - это ненормально. Можно, конечно, обойтись и 1-ой функцией, но это тоже будет слишком жирно для такой простой задачи. Отсюда движки, осознающие эту ненормальность, предлагают свои правильные нормальные решения и вводят дополнительные аргументы. Чтоб нам было удобно. 

AKS предлагает эмуляцию такого "правильного решения" для IE. Чтоб нам было удобно. Это никак не отменяет пользы замыканий (вариант SelenIT), это дорога в ту же сторону, никто не спорит, просто трём'c...
PM MAIL WWW   Вверх
smartov
Дата 26.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Zeroglif, ааа... ясно

Просто как по мне ничего такого особенно в провозглашении анонимной функции и ее вызове нету. Любо явист вообще скажет что это в порядке вещей.
PM MAIL   Вверх
AKS
Дата 26.7.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Zeroglif @  26.7.2007,  13:46 Найти цитируемый пост)
я могу легко снять брюзжание

Ну-у-у, какое же это "брюзжание". Сейчас я Вас буду убеждать, что ничего подобного тут нет. Вот чего далеко ходить - испытал я "ихние" варианты, а они не работают со строкой в первом аргументе. А чья заслуга, что вариант из этой темы со строкой работает? Не буду показывать пальцем... ;)
Цитата(Zeroglif @  26.7.2007,  13:46 Найти цитируемый пост)
...значит, они тоже тестировали и тоже пришли к позитивному выводу

Они, безусловно, молодцы - отличные практики. Очень-очень много полезного пишут. Но кроме того, что я уже отметил, они вот, между нами говоря, мои комменты не-е-е публикуют!!! 
Вчера по вашей ссылке написал Andrea, что он чего там попутал в своей $extend:
Код

// p="prototype"
f[p]=b[p]; // зачем это, если сразу переопределяет?
f[p]=new f;

А Stev'y тоже писал, что null - 15 = -15 - это норма поведения (ECMAScript 9.3) - тоже не захотел публиковать критику. 
Но это я так, к слову - я на них ничуть не обижаюсь, т.к. у них тоже учусь. Спасибо им.

Возвращаясь к эмуляции для IE нужно заметить, что подавляющее кол-во программ именно так и написаны программерами - НА НАШ СТРАХ И РИСК. Так что одной эмуляцией больше, одной меньше - ну подумаешь у кого-нибудь чего-нибудь "слетит с катушек"... smile
PM MAIL   Вверх
Zeroglif
Дата 26.7.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(smartov @  26.7.2007,  14:27 Найти цитируемый пост)
Просто как по мне ничего такого особенно в провозглашении анонимной функции и ее вызове нету. Любо явист вообще скажет что это в порядке вещей.

Согласен. Анонимная функция сама по себе может и в порядке вещей, но использовать её не из любви к искусству, а почём зря или вынужденно - это имхо беспорядок.

Код

var x = 1;

// или

var x = function (a) { return function () { return a; }; }(1)();

// ?


Это сообщение отредактировал(а) Zeroglif - 26.7.2007, 15:14
PM MAIL WWW   Вверх
AKS
Дата 26.7.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Zeroglif, я написал вариант без apply. Сделал, кстати, еще и условие "пожестче":
Код

if (typeof (aFunc) === 'function' && len > 2) // чтобы строка не попала

Но ведь конструкция с eval помедленней получается! Вот тест:
Код

function F(aFunc, aArray) {
    var params = [],
        len = aArray.length;
    while (len--) {
        params[len] = 'aArray[' + len + ']';
    };
    return eval('aFunc(' + params + ')');
};

/*
function F(aFunc, aArray) {
    return aFunc.apply(this, aArray);
};
*/

var t = new Date,
    i = 100000;

while (i--) {
    F(function (a, b, c, d, e, f) {
        return [a, b, c, d, e, f]; },
      [1, 2, 3, 4, 5, 6]);
}

alert((new Date) - t);

Спрашиваю вашего мнения, т.к. именно Вы всегда отмечаете, что apply/call - это вещи, которые далеко не везде "известны".
PM MAIL   Вверх
Zeroglif
Дата 26.7.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(AKS @  26.7.2007,  16:57 Найти цитируемый пост)
пожестче

Это правильно.

Цитата(AKS @  26.7.2007,  16:57 Найти цитируемый пост)
конструкция с eval помедленней получается

Игра-то ваша, вы же хотите уйти от apply и в то же время поддержать неопределённое число аргументов, куда деваться-то... имхо трёх допаргументов хватит за глаза.
PM MAIL WWW   Вверх
AKS
Дата 26.7.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Zeroglif @  26.7.2007,  19:22 Найти цитируемый пост)
...вы же хотите уйти от apply

Не по своей воле. smile Хотя не сложно сделать "ветвистый" вариант - и с apply, и с eval (пусть так и будет).
Цитата(Zeroglif @  26.7.2007,  19:22 Найти цитируемый пост)
Это правильно.

Тут по-поводу "жесткости" еще вопросы появляются. Вот так:
Код

window.setInterval('window.status += 2', 1000, 1);

у меня ну ни-и-икак не хочет работать нативный setInterval/setTimeout (т.е. с допом). Вот если функция вместо строки, то работает. А если заменить на эмулированный, то хоть как работает. Так что же делать? Идти, как говорится, до конца и эмулировать поведение полностью.
Хотя чего я тороплюсь - может это только у меня не работает... 


PM MAIL   Вверх
Zeroglif
Дата 27.7.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(AKS @  26.7.2007,  20:33 Найти цитируемый пост)
может это только у меня не работает

У меня тоже не работает. Равно как и игра с другими свойствами хоста, например, document.title+=2, что-то IE не нравится, или давай ему третьим аргументом язык, или упс...

Цитата(Zeroglif @  26.7.2007,  13:46 Найти цитируемый пост)
хостовые методы живут своей жизнью


PM MAIL WWW   Вверх
AKS
Дата 27.7.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Zeroglif @  27.7.2007,  00:36 Найти цитируемый пост)
...давай ему третьим аргументом язык

Еще раз спасибо! Ситуация проясняется. Все верно - по умолчанию 'jscript', а тут вдруг указал я ему черт знает что - конечно не будет работать, ведь строку на таком языке ( 1 ) он разобрать не может...

P.S.
Вы, наверно, миллионер (если исчислять в "спасибо")? smile

PM MAIL   Вверх
AKS
Дата 27.7.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Ну чтож, пока вот такая штуковина получилась - надеюсь, что больше никаких "аномалий" не выявится (главное - придумал имя крутое smile ):
Код

function XpandDelaySetter(aMethod) {
    var fnOriginal = window[aMethod],
        bNative = /\[native\scode\]/.test(fnOriginal);
    if (!bNative) {
        return false;
    };
    window[aMethod] = function (aFunc, aDelay, aLang) {
        var oArgs = arguments,
            iLen = oArgs.length,
            iIter = 2,
            vCodeType = typeof (aFunc),
            bCheckLang = iLen === 3 && 
                /^(jscript|javascript|vbscript)$/i.test(aLang),
            bHostMeth = vCodeType == 'object' &&
                /function/.test(aFunc),
            bEval = !Function.prototype.apply || bHostMeth,
            vParams = bEval ? '' : [],
            sDiv = '',
            fnCallBack;
        if (vCodeType == 'string' || bCheckLang) {
            fnCallBack = aFunc;
        } else if ((vCodeType == 'function' || bHostMeth) &&
                iLen > iIter) {
            for (; iIter < iLen; iIter++) {
                bEval ? vParams += sDiv + 'oArgs[' + iIter + ']'
                      : vParams[vParams.length] = oArgs[iIter];
                sDiv = ', ';
            };
            fnCallBack = function () {
                return (bEval
                       ? eval('aFunc(' + vParams + ')')
                       : aFunc.apply(this, vParams));
            };
        };
        return fnOriginal(fnCallBack || aFunc, aDelay, aLang);
    };
};


Это сообщение отредактировал(а) AKS - 27.7.2007, 18:39
PM MAIL   Вверх
smartov
Дата 27.7.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Оригинально, но велосипед еще тот  smile 
PM MAIL   Вверх
AKS
Дата 27.7.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(smartov @  27.7.2007,  10:32 Найти цитируемый пост)
...велосипед еще тот

Т.е. это уже где-то кто-написал? Чтож Вы сразу не сказали - я бы время зря не тратил. :(

PM MAIL   Вверх
Diesel Draft
Дата 27.7.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



settimeout();


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.