Re[15]: jQuery – Javascript нового поколения
От: Mamut Швеция http://dmitriid.com
Дата: 10.08.07 14:27
Оценка:
Z>>>Вот кстати, если ты облазил исходники вдоль и поперёк, то возьми любой отдельный кусок, допустим, манипуляцию классами, что ты там увидишь — неоптимальный код (inArray, each и т.п.),
M>>чем он неоптимален?
Z>A посмотреть и подумать, можно ли его упростить?

Зачем? Может, вместо того, чтобы "наискосок" читать код, может посмотришь, как и где эти функции используются? Вот неполюбившиеся тебе inArray и each:
    inArray: function( b, a ) {
        for ( var i = 0, al = a.length; i < al; i++ )
            if ( a[i] == b )
                return i;
        return -1;
    },

    each: function( obj, fn, args ) {
        if ( obj.length == undefined )
            for ( var i in obj )
                fn.apply( obj[i], args || [i, obj[i]] );
        else
            for ( var i = 0, ol = obj.length; i < ol; i++ )
                if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break;
        return obj;
    }


Что именно в них не нравится?

Z>>>или возьмём твою любимую isFunction, её что можно использовать на низком уровне (в отрыве от фреймворка)?

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

Z>Ну-ну.


Что ну-ну?(обожаю такую аргументацию) Вот она:
    // This may seem like some crazy code, but trust me when I say that this
    // is the only cross-browser way to do this. --John
    isFunction: function( fn ) {
        return !!fn && typeof fn != "string" && !fn.nodeName && 
            fn.constructor != Array && /function/i.test( fn + "" );
    }


Что мешает ее использовать в своем коде?

Z>>>Она что переварит всё, что угодно корректно? Конечно, нет.

M>>Почему нет? У нее ровно одна задача — узнать, является ли передаваемый параметр функцией. Со своей задачей она справляется.
Z>Ну передай ей для начала значения этих переменных:

Z>
Z>var a, b, c;

Z>a = /^\dfunction\d/;
Z>b = new String('Wow, J(ava)Script is soooo functional...');
Z>c = ['method', 'function', 'object'];
Z>c.constructor = 'Lego';
Z>


Z>




a — функция
b — не функция
c — не функция

Что и следовало ожидать. Почему a — функция? Читаем ECMA-262 пункт 15.10.2:

A regular expression pattern is converted into an internal function using the process described below.

Паттерн регулярного выражения конвертируется во внутреннюю функцию используя описанный процесс.


Так же пункт 15.10.2.2:

A Pattern evaluates ("compiles") to an internal function value. RegExp.prototype.exec can then apply this function to a string ...

Паттерн вычисляется ("компилирутся") во внутренне функциональное значение. RegExp.prototype.exec может потом применить эту функцию к строковому литералу...


Какие еще "аргументы" будут?


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.