当前位置: 代码迷 >> Web前端 >> OOP与jQuery(2):对象
  详细解决方案

OOP与jQuery(2):对象

热度:137   发布时间:2012-09-07 10:38:15.0
OOP与jQuery(二):对象

?

本系列文章由石川创作,李松峰翻译,W3ctech.com首发,图灵社区转载。

?

?

“OOP与jQuery”是“解码jQuery”系列中的一个子系列,主要讨论jQuery的内部构成及相关的OOP(Object Oriented Programming,面向对象编程)概念。

?

?

在上一篇中,我们以jQuery代码为例解释了变量(数据)和函数的概念。本篇将通过jQuery来介绍对象。

?

1.对象就是对象,跟人和椅子一样

?

既然我们讨论的是面向对象编程,那对象是什么呢?对象就是对象,比如苍井空老师就是一个对象,桌椅或狗也是对象。所谓面向对象。不过就是用编程语言来表示对象而已。

?

? ? ?如上所述,那么shichuan就是一个对象。因此在OOP中,可以用一个对象来表示他:

?

?

var shichuan = {};

?

?

? ? ?每个对象,都可以有属性和方法(行为)。比如,shichuan的头发是黑色的,这就是他的属性。因为天生就是黑色的, ? ? ? ?他不用时不时地把头发染黑,所有它不是方法(行为)。我们可以把这个属性添加到shichuan对象中:

?

?

var shichuan = {
      hair : "black"
};

?

?

? ? ?好了,假设shichuan有一个特长是骑独角兽,那么骑独角兽(riding unicorn)就是他的一个方法(行为)。用OOP来表 ? ? 示,就是这样:

?

?

var shichuan = {
      hair : "black",
      ridingUnicorn : function() {
              // 我怎么骑独角兽
      }
};

?

?

? ? ?总结一下对象的概念:

?

? ? ? 1. 包含对象的变量名叫vshichuan。

2. 对象的内容被包含在{和}中。

3. 对象的元素(属性和方法)用逗号来分隔。

4. 键/值对用冒号分隔,比如key : value(或者上面例子的hair : "black")。

?

2. jQuery中的对象

?

? ? 那么,jQuery中是怎么是使用对象的呢?还记得我们在第一篇文章里谈到的jQuery的局部副本吧。下面我们就看看jQuery ? ? ? 函数的内部(大约在第4行),实际上这个函数里只有一行代码,其注释说:jQuery对象实际上就是一个“增强版的”init ? ? 构造函数。那这个增强的init是什么样呢?

?

?

var jQuery = function() {
      // jQuery对象实际上就是一个“增强版的”init构造函数
      return new jQuery.fn.init(selector, context, rootjQuery);
}

?

? ?如果你在代码里搜索“jQuery.fn”,在大约第76行可以找到它,大致是这样的:

?

jQuery.fn = jQuery.prototype = {
        constructor : jQuery,
        init : function(selector, context, rootjQuery) {
        .......
        },
        ......
}
?

? ? jQuery的原型(下一篇文章将介绍原型)――jQuery.prototype,是一个对象,一个大对象。这个对象有很多很多属 ? ? 性和方法。比如,它的属性有constructor、selector、jquery、length,等等;它的方法有init、size、toArray、 ? ? ? get、pushStack,等等。

?

3. 函数是数据,也是对象

?

? ?在第一篇文章中,我们说过函数就是数据,通过以下两种方式定义jQuery函数,结果是相同的:

?

// 局部 jQuery

function jQuery(selector, context) {

        //  .......

}

// 局部 jQuery

var jQuery = function(selector, context) {

      // ........

}

?

? ? 实际上,还有第三种方法:

?

// 局部 jQuery

var jQuery = new Function("selector", "context", "// .......");

?

? ? 在OOP中,使用new加构造函数(这里的Function)是创建新对象的典型方式。虽然这种方法也能创建函数,但通常 ? ? ? 并不是最好的方式,因为JavaScript会是使用eval对传入的源代码进行求值。

?

  相关解决方案