代码改变世界

jQuery源码中的access函数理解

2012-07-23 14:42  VVG  阅读(169)  评论(0)    收藏  举报

111

function access( elems, key, value, exec, fn, pass ) {
    var length = elems.length;
    
    // 拆分key
    if ( typeof key === "object" ) {
        for ( var k in key ) {
            access( elems, k, key[k], exec, fn, value );
        }
        return elems;
    }
    
    // Setting one attribute
    if ( value !== undefined ) {
        // Optionally, function values get executed if exec is true
        // 根据传的参数看 exec=true , pass=undefine, fn = jQuery.attr
        // 判断VALUE是否为函数,是函数则exec为true
        exec = !pass && exec && jQuery.isFunction(value);
        // 拆分
        for ( var i = 0; i < length; i++ ) {
            fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
        }
        
        return elems;
    }
    
    // Getting an attribute
    return length ? fn( elems[0], key ) : undefined;
}