jquery是怎样开始工作(2)

       接着上节写.我们在工作中使用jquery的时候常常是这样开始的:

$(document).ready(function(){});

       这样写的目的是让文档先加载,然后再开始执行ready.这和调用window.onload方法差不多,当然ready有些好处,比如速度快,会执行多个,不再赘述.我要说的是,它有个简写的方法:

$(function(){});

      其实我人生中写的第一段jquery代码就是这样开头的,当时也没有太多的理解,最近看源码,才知道为什么可以这样写,源码大意如下,中间略去N多代码:

var rootjQuey = JQuery(docuemt);
rootJQuery.ready = function(){
  //具体实现很复杂以后再说
}
// 这是我上节写的初始化函数
init(selector){
     if(typeof selector == "function"){
             return rootjQuery.ready( selector ) ;
      }
}

    所以$(function())实际是调用init(function()),那么返回的就是rootjQuery.ready(function()),也就是JQuery(doucment).ready(function()),即$(document).ready(function());

    我这两节写的初始化函数都是init,而真正的源码的初始化函数是:

var JQuery = function(selector, context){
      reutrn new JQuery.fn.init(selector, context);
}

// 通过初始化函数构建JQuery对象
var init = JQuery.fn.init = function(selector, context){
      // N多代码...
}

    其中JQuery.fn = JQuery.prototype,也就是JQuery函数的原型对象,而我自己定义的是:

var MyJquery = function(selector){  
  
        // 把selector参数传入init中让它去初始化  
        return new init(selector);  
    };  
  
    // 初始化函数,它负责处理传入的参数  
    var init = function(selector){  
        alert("传入的参数是"+selector);  
    }

    参数context先不说,源码比我多了个JQuery.fn.init();也就是把init()函数定义在了JQuery.fn(JQuery原型对象)上,这样做的好处是可以节省空间. 简单的理解就是:

    直接定义init(),每个实例对象都会有一个init()方法.

    通过原型对象定义init(),每个实例对象共享一个init()方法.

    具体关于对象原型相关的知识,推荐<<javascript高级程序设计>>(我看的是第三版第六章面向对象的程序设计)

相关推荐