一、为什么jquery前面要写$

Javascript没有package的概念,而作者又希望所有jQuery相关的API都能通过一个全局性的对象来容纳。
名为jQuery的全局变量就是这样一个对象,不过显然作者也觉得没必要每次都要大家写jQuery.balabala......这样有点小啰嗦了,于是就又给了jQuery一个简短而独特的别名——$.

二、$.fn  $.extend()   $.fn.extend

理解jquery的$.extend()、$.fn和$.fn.extend()    jQuery插件开发模式

2.1  $.fn  

原来 jQuery.fn = jQuery.prototype.对prototype肯定不会陌生啦。

虽然 javascript没有明确的类的概念,但是用类来理解它,会更方便。

jQuery便是一个封装得非常好的类,比如我们用 语句 $(“#btn1″) 会生成一个 jQuery类的实例。

2.2   $.extend()

jQuery官网

When two or more object arguments are supplied to $.extend(), properties from all of the objects are added to the target object. Arguments that are null or undefined are ignored.

If only one argument is supplied to $.extend(), this means the target argument was omitted. In this case, the jQuery object itself is assumed to be the target. By doing this, you can add new functions to the jQuery namespace. This can be useful for plugin authors wishing to add new methods to JQuery.

Keep in mind that the target object (first argument) will be modified, and will also be returned from $.extend(). If, however, you want to preserve both of the original objects, you can do so by passing an empty object as the target:

2.2.1.   $.extend(object)

为jQuery类添加类方法,可以理解为添加静态方法  是在jQuery命名空间或者理解成jQuery身上添加了一个静态方法而已。

jQuery.extend({
min: function(a, b) { return a < b ? a : b; },
max: function(a, b) { return a > b ? a : b; }
});
jQuery.min(2,3); // 2
jQuery.max(4,5); //

2.2.2.  $.extend( target, object1, [objectN])

用一个或多个其他对象来扩展一个对象,返回被扩展的对象

 var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);
结果:settings == { validate: true, limit: 5, name: "bar" }

2.3    $.fn.extend(object)

对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。

 $.fn.extend({                               // 方法 是在jQuery的prototype属性上扩展的,自然实例可以使用此方法
alertWhileClick:function() { // 和 $.extend() 道理一样,只是一个是扩展在Jquery上,一个是扩展在Jquery.prototype上
$(this).click(function(){
alert($(this).val());
});
}
});
$("#input1").alertWhileClick(); // 页面上为:

三、javaScript对象、DOM对象和jQuery对象

JavaScript 对象、DOM对象、jquery对象的区别、转换详解

javaScript对象:

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。

DOM对象:

DOM实际上是以面向对象方式描述的文档模型。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。
根据W3C DOM规范,DOM是HTML与XML的应用编程接口(API)。
通过 DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删除,同时也可以创建新的元素。
HTML DOM 独立于平台和编程语言。它可被任何编程语言诸如 Java、JavaScript 和 VBScript 使用。
DOM对象,即是我们用传统的方法(javascript)获得的对象。

JQuery对象:

jQuery对象即是用jQuery类库的选择器获得的对象

jQuery对象就是通过jQuery包装DOM对象后产生的对象,它是jQuery独有的。如果一个对象是jQuery对象,那么就可以使用jQuery里的方法

区别:

在jQuery对象中无法使用DOM对象的任何方法

在DOM对象中无法使用JQuery对象的任何方法

两者之间互相使用方法时时需要先转换一下的

DOM对象 JQuery对象之间的转换

DOM对象转成jQuery对象:

对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。

jQuery对象转成DOM对象:

两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index);

(1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。

(2)使用jquery的方法  .get(index)

四、工具方法(utility)

jQuery设计思想      工具方法(utilities)

除了对选中的元素进行操作以外,还提供一些与元素无关的工具方法(utility)。不必选中元素,就可以直接使用这些方法。

如果你懂得Javascript语言的继承原理,那么就能理解工具方法的实质。

它是定义在jQuery构造函数上的方法,即jQuery.method(),所以可以直接使用。

而那些操作元素的方法,是定义在构造函数的prototype对象上的方法,即jQuery.prototype.method(),所以必须生成实例(即选中元素)后使用。

如果不理解这种区别,问题也不大,只要把工具方法理解成,是像javascript原生函数那样,可以直接使用的方法就行了。

常用的工具方法:

   $.trim()   去除字符串两端的空格。
  $.each() 遍历一个数组或对象。
  $.inArray() 返回一个值在数组中的索引位置。如果该值不在数组中,则返回-1。
  $.grep() 返回数组中符合某种标准的元素。
  $.extend() 将多个对象,合并到第一个对象。 //即继承
  $.makeArray() 将对象转化为数组。
  $.type() 判断对象的类别(函数对象、日期对象、数组对象、正则对象等等)。
  $.isArray() 判断某个参数是否为数组。
  $.isEmptyObject() 判断某个对象是否为空(不含有任何属性)。
  $.isFunction() 判断某个参数是否为函数。
  $.isPlainObject() 判断某个参数是否为用"{}"或"new Object"建立的对象。
  $.support() 判断浏览器是否支持某个特性。

随机推荐

  1. hdu 2859 (二维dp)

    点击打开链接 题意: 给你一个n*n的矩阵,矩阵中只含有26个小写字母,求其中最大的对称矩阵的大小 当我们算到s[i][j]时,每次我们只需要将它上方的和右方的依次比较,看是否相同 注意这里不能只比较 ...

  2. Standford机器学习 聚类算法(clustering)和非监督学习(unsupervised Learning)

    聚类算法是一类非监督学习算法,在有监督学习中,学习的目标是要在两类样本中找出他们的分界,训练数据是给定标签的,要么属于正类要么属于负类.而非监督学习,它的目的是在一个没有标签的数据集中找出这个数据集的 ...

  3. SQlServer---时间的操作

    select Day(getdate())--当前日是这个月的第几天 -Day(getdate()))))--当前月有多少天 -Day(getdate()))))-Day(getdate())--当前 ...

  4. 浅谈 JavaScript new 执行过程及function原理

    前言 最近在学习JavaScript语言精粹,感觉写得相当不错.所以这里也算是总结一下.一个方法使用new的方式创建到底是怎样的过程,一个function的声明内部又是怎样执行的呢 另外学的过程中,不 ...

  5. Jmeter对基于websocket协议的压力测试

      WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).   浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就 ...

  6. Python高手之路【十二】面向对象设计模式

    单例模式 单例,顾名思义单个实例. class Person: __instance = None def __init__(self): pass @staticmethod def getInst ...

  7. OpenH264

    转自:http://blog.csdn.net/chinabinlang/article/details/41209053 目前最常用的264工程师x264: 最近有又有一个开源工程OpenH264, ...

  8. java基础练习 2

    public class Second { /* * 打印出杨辉三角形(要求打印出10行如下图) */ public static void main(String[] args){ int i,j, ...

  9. saltstack布署实践 【配置文件管理-state模块】

    那如果要批量修改被管机器的某个配置文件怎么做?以下给出一个最简单案例.   先在主管机器master上查看/etc/salt/master配置文件 看到有以下几行配置文件   # file_roots ...

  10. 毕向东_Java基础视频教程第19天_IO流(11~14)

    第19天-11-IO流(字节流File读写操作) import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...