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