jQuery核心结构简单分析

2017-01-11 12:22:50来源:cnblogs.com作者:回向人点击

  • 以下分析均采取沙箱模式

    (function (window) {//为了提高性能把需要的变量统一提前声明var arr = [],    push = arr.push;//为区别jQuery,此文章以iQuery来定义封装的函数function iQuery( selector ) {    return new iQuery.fn.init( selector );}//为了方便把iQuery的原型定义为fn,并为原型添加两个方法iQuery.fn = iQuery.prototype = function () {    constructor: iQuery,    each: function ( callback ) {        return iQuery.each( this, callback );    },    map: function ( callback ) {        return iQuery.map( this, callback );    },}//把所有的方法都挂载到iQuery上iQuery.select = function (selector) {    return slice.apply( document.querySelectorAll( selector ) );};iQuery.each = function ( arr, callBack ) {    for ( var i = 0; i < arr.length; i++ ) {        if ( arr.length >= 0 ) {            if ( callBack.call( arr[i], i, arr[i] ) == false ) break;        } else {                for ( var k in arr ) {                     if ( callBack.call( arr[k], k, arr[k] ) == false ) break;                }            }    }};iQuery.map = function ( arr, callback ) {    var rest = [], tmp,            i;    if ( arr.length >= 0 ) {        for ( i = 0; i < arr.length; i++ ) {            tmp = callback( arr[ i ], i );            if ( tmp != null )  {                rest.push( tmp );            }        }    } else {        for ( i in arr ) {            tmp = callback( arr[ i ], i );            if ( tmp != null )  {            rest.push( tmp );            }        }    }    return rest;};//init为构造函数,而且jQuery的巧妙之处就是iQuery和init公用一个原型,并且init是iQuery的一个成员var init = iQuery.fn,init = function ( selector  ) {    push.apply( this, iQuery.select( selector ) );}init.prototype = iQuery.fn;})(window)

    

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台