任何复杂的技术都是从最简单的问题开始的,如果你被jQuery几千行庞杂结构的源代码所困惑,那么建议你阅读本节内容,我们将探索jQuery是如何从最简单的问题开始,并逐步实现羽翼渐丰的演变过程,从jQuery核心技术的还原过程来理解jQuery框架的搭建原理。
2.2.1 起源--原型继承
用过JavaScript的读者都会明白,在JavaScript脚本中到处都是函数,函数可以归置代码段,把相对独立的功能封装在一个函数包中。函数也可以实现类,这个类是面向对象编程中最基本的概念,也是最高抽象,定义一个类就相当于制作了一个模型,然后借助这个模型复制无数的实例。
例如,下面的代码就可以定义最初的jQuery类,类名就是jQuery,你可以把它视为一个函数,函数名是jQuery。当然,你也可以把它视为一个对象,对象名是jQuery。与其他面向对象的编程语言相比,JavaScript对于这些概念的界定好像很随意,这降低了编程的门槛,反之也降低了JavaScript作为编程语言的层次。
- <script language="javascript" type="text/javascript">
- var jQuery = function(){
- //函数体
- }
- </script>
上面创建了一个空的函数,好像什么都不能够做,这个函数实际上就是所谓的构造函数。构造函数在面向对象语言中是类的一个特殊方法,用来创建类。在JavaScript中,你可以把任何函数都视为构造函数,这没有什么不可以的,这样不会伤害代码本身。
所有类都有最基本的功能,如继承、派生和重写等。JavaScript很奇特,它通过为所有函数绑定一个prototype属性,由这个属性指向一个原型对象,原型对象中可以定义类的继承属性和方法等。所以,对于上面的空类,可以继续扩展原型,其代码如下。
广州网站建设,网站建设,广州网页设计,广州网站设计
- <script language="javascript" type="text/javascript">
- var jQuery = function(){}
- jQuery.prototype = {
- //扩展的原型对象
- }
- </script>
原型对象是JavaScript实现继承的基本机制。如果你觉得jQuery.prototype名称太长,没有关系,我们可以为其重新命名,如fn,当然你可以随便命名。如果直接命名fn,则表示该名称属于Window对象,即全局变量名。更安全的方法是为jQuery类定义一个公共属性jQuery.fn,然后把jQuery的原型对象传递给这个公共属性,实现代码如下。
- <script language="javascript" type="text/javascript">
- jQueryjQuery.fn = jQuery.prototype = {
- //扩展的原型对象
- }
- </script>
这里的jQuery.fn相当于jQuery.prototype的别名,方便以后使用,它们指向同一个引用。因此若要调用jQuery的原型方法,直接使用jQuery.fn公共属性即可,不需要直接引用jQuery.prototype,当然直接使用jQuery.prototype也是可以的。
既然原型对象可以使用别名,jQuery类也可以起个别名,我们可以使用$符号来引用它,代码如下。
广州网站建设,网站建设,广州网页设计,广州网站设计
- var $ = jQuery = function(){}
现在模仿jQuery框架源码,给它添加两个成员,一个是原型属性jquery,一个是原型方法size(),其代码如下。
- <script language="javascript" type="text/javascript">
- var $ = jQuery = function(){}
- jQueryjQuery.fn = jQuery.prototype = {
- jquery: "1.3.2", //原型属性
- size: function() { //原型方法
- return this.length;
- }
- }
- </script>



