您现在的位置是:首页 > 电脑技术查询 > web开发

jquery是怎么开始工作(2)

编辑:chaxungu时间:2022-10-10 23:23:24分类:web开发

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高级程序设计>>(我看的是第三版第六章面向对象的程序设计)