零起步学习如何写jQuery框架

2010-04-10 18:00:35   作者:不详   来源:互联网

jQuery大概是怎样工作的,我假定你已经具备了一些基本的javascript知识,如果基础不够推荐你阅读《JavaScript高级程序设计》《悟透JavaScript》这两本书。本文不适合对js里面的类、对象、函数、prototype等概念没有了解的朋友。

我们从最开始的说起:

首先构造一个对象给使用者,假定我们这个框架叫 Shaka

var Shaka = function(){}; 

这里我们创建了一个空函数,里面什么也没有,这个函数实际上就是我们的构造函数。为了让我们生成的对象能够调用在prototype里定义出来的方法, 我们需要用原型的方式(把Shaka当作是一个类)给Shaka添加一些方法,于是定义:

Shaka.fn =  Shaka.prototype = {};

这里的Shaka.fn相当于Shaka.prototype的别名,方便以后使用,它们指向同一个引用。

OK,我们添加一个sayHello的方法, 给Shaka添加一个参数,这样这个框架最基本的样子已经有了,如果它有生命的话那么它现在是1岁, 看代码:

<script type="text/javascript">
var Shaka = function(age){ this.age = age; };
Shaka.fn = Shaka.prototype = { sayHello: function() { alert('I am a little baby, my age is ' + this.age + ' years old.'); }};
var babyShaka = new Shaka(1);
babyShaka.sayHello();
</script>

好啦,先别激动, 我们注意到这个框架跟jQuery在使用上是有一些差别的, 比如在jq 中我们可以这样写:

jQuery('#myid').someMethod();

这是怎样做到的呢, 也就是说 jQuery()这个构造函数返回了一个jQuery的对象实例,因此我们可以在上面调用它的方法,所以Shaka的构造函数应该返回一个实例,它看起来应该是这个样子:

var Shaka = function(){ return //返回Shaka的实例; };

那么我们要如何取得一个Shaka的实例呢, 我们先来回顾一下使用prototype方式来模拟类的时候 var someObj = new  MyClass(); 这个时候实际上是创建一个新对象someObje,把新对象作为this指针,调用 MyClass函数,即类的构造函数, 然后 someObj 就获得了在 MyClass.prototype里面定义的方法, 这些方法内的this指针指当前对象实例。

在jQuery中使用了一个工厂方法来创建一个实例,这个方法位于jQuery.prototype中, 现在我们重新来定义Shaka.prototype, 给它添加一个init方法用于返回一个Shaka的实例, 并且把Shaka的构造函数稍稍改变一下:

var Shaka = function(age) { return new Shaka.fn.init(age); };

Shaka.fn = Shaka.prototype = {
       init: function(age) { this.age = age; return this; },
       sayHello: function() { alert('I am a little baby, my age is ' + this.age + ' years old.'); }
};

Shaka.fn.init.prototype = Shaka.fn;//这里new Shaka.fn.init(age)创建的对象具有init方法的prototype指向对象的方法 , 因此我们将init方法的prototype指向 Shaka的prototype, 这样创建出来的对象就具有了Shaka.prototype里面定义的方法。


栏目搜索>>分类导航
Flash幻灯 jQuery幻灯 JS幻灯 Flash相册 jQuery相册 图片特效 导航菜单 广告代码 在线客服 表单按钮 其它特效

HTML CSS JavaScript Dreamweaver Fireworks 设计分享

建站教程 网站运营 实用工具 网页模板 网页素材

CSS酷站 网上购物 设计团队 设计博客
教程排行榜
20款华丽酷炫的jQuery图片相册插件
新手教程:10个jQuery特效讲解
分享10款精美的焦点幻灯和图片特效jQuery插件
如何处理JS的'null'为空或不是对象
多款提高网页表格(table)操作易用性的jQuery插件
20款超酷的基于jQuery的幻灯和表单插件(附...
打造完美的jQuery网页进度条(LOADING)
如何把在线地图Google Maps API整合到网站中去?
jQuery 1.4.1 中文帮助文档速查表(附CHM文件下载)
最新的jQuery 1.4官方文档中文翻译版
零起步学习如何写jQuery框架
jQuery的鼠标事件实例教程
基于JQuery的上传插件Uploadify使用方法详解
多个增强Web设计界面的Javascript脚本代码
九款常用的JS代码高亮工具
lazyload:基于jQuery框架实现图片异步加载
下载排行榜
基于jQuery的超炫酷的3D切换JS幻灯焦点图特效代码
半透明立体质感的宽屏flash+xml焦点幻灯代码
简洁效果多图切换flash幻灯焦点图代码
带标题和数字导航的JS焦点幻灯特效代码
适合摄影网站超漂亮的宽屏flash+xml幻灯轮换代码
31款简单实用的CSS+JS下拉菜单脚本
3D立体效果金字塔环形旋转的flash+xml相册代码
基于jQuery实现的瀑布流布局列表特效代码
透明质感上下滑动带小图预览5屏JS焦点图幻...
超酷的3D摩天轮flash+xml相册幻灯图片代码
能沿多个方向滑动切换的jquery幻灯代码
自带多种幻灯效果支持缩略图导航的jquery画...
可改图片尺寸和张数的flash幻灯轮换代码
很好看的带缓冲效果CSS下拉菜单导航代码
基于jquery很有趣的360度全景图片预览特效
6屏幻灯上下滑动式带缩略图和文字介绍的fla...