在我的博客中,曾经写过一篇关于JQuery插件的文章  https://www.cnblogs.com/wphl-27/p/6903170.html

今天看一个项目的代码时,看到使用JQuery插件部分,我于是又仔细看了几篇文章,对JQuery插件有了更加深刻的理解,特记录如下:

我们都知道JQuery中的一个给DOM中元素设置CSS的方法,很简单

$("div").css("color","red");

上面这个方法,可以为DOM中的div元素设置css样式。 我们可能从来没有想过,这个在JQuery内部是怎样实现的呢,我们有没有可能仿照它的内部实现,去实现我们自己自定义的方法

比如我们可以自己实现一个ourFunc(...), 然后也可以这样用 $("div").outFunc(....)  答案是可以的,这个答案就是 JQuery插件

这个JQuery默认已经提供了的方法css, 其实在JQuery内部就是用JQury插件$.fn来实现的。所以同样的道理,我们也可以自己写方法添加到$.fn上,然后就可以依葫芦画瓢来使用了:  --看下面的例子

$.fn.setColor = function()
{
this.css("color", "blue"); console.log(this instanceof jQuery); //true };

这里,我们定义了一个JQuery插件setColor, 现在我们可以像使用JQuery中默认提供的css方法来一样使用它

$("div").setColor();

我们在来看setColor的内部实现, 我们会发现内部用了this, 而从下一个语句console.log我们可以看出,this就是JQuery对象,而不是DOM对象,所以它才可以直接使用JQuery内部的方法(JQuery插件方法)css()

那么我们可能会想,有时候我们搞不清楚在JQuery插件方法内部的this是不是JQuery对象,我们为了安全起见,用$(this)可以么,答案是完全可以的,其实在这里,this,$(this),$($(this))..不管嵌套多少层,都是一样的。 具体原因这里就不深究了

反正你就记住 在插件的范围内,this 关键字代表了这个插件将要执行的jQuery对象,而不是原生的DOM对象

上面的内容,我们讲到了$.fn, 通过$.fn.myFunc()的方式来定义JQuery插件方法 myFunc()

接下来,我们看看JQuery中的$.extend()

基于我以前项目中对$.extend()的使用和认识,它的使用应该是这样的

$.extend(target, object1, [objectN])  => 即用一个(object1)或者多个(object1,..objectN)其他对象来扩展一个对象(target), 然后返回被扩展的对象

举个例子如下:

var basicInfo = {name: Mike, age: 28, gender: male};
var additionInfo = {name: Luke, age: 32, company: advent}; $.extend(basicInfo, additionInfo); //结果
basicInfo == {name: Luke, age: 32, gender: male, company: advent}

再谈JQuery插件$.extend(), $.fn和$.fn.extend()的更多相关文章

  1. 再谈Jquery Ajax方法传递到action 【转载】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/984466 之 ...

  2. 再谈Jquery Ajax方法传递到action

     原始出处 :http://cnn237111.blog.51cto.com/2359144/984466  本人只是转载 原文如下: 假设 controller中的方法是如下: public Act ...

  3. 再谈Jquery Ajax方法传递到action(转)

    之前写过一篇文章Jquery Ajax方法传值到action,本文是对该文的补充. 假设 controller中的方法是如下: public ActionResult ReadPerson(Perso ...

  4. Jquery自定义插件之$.extend()、$.fn和$.fn.extend()

    jquery插件的种类: 1.对象级别的插件开发,即给jQuery对象添加方法,封装对象方法的插件,如:parent().appendTo() 2.一种是类级别的插件开发,即给jQuery添加新的全局 ...

  5. [JS] 理解jquery的$.extend()、$.fn和$.fn.extend()

    jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); jQuery.fn jQuery.fn = jQuery.prototype ...

  6. $.extend()、$.fn和$.fn.extend()

      理解$.extend().$.fn和$.fn.extend()   原文链接:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.ht ...

  7. JQuery $ $.extend(),$.fn和$.fn.extend javaScript对象、DOM对象和jQuery对象及转换 工具方法(utility)

    一.为什么jquery前面要写$ Javascript没有package的概念,而作者又希望所有jQuery相关的API都能通过一个全局性的对象来容纳. 名为jQuery的全局变量就是这样一个对象,不 ...

  8. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...

  9. 动手Jquery插件

    自己动手Jquery插件 最近Web应用程序中越来越多地用到了JQuery等Web前端技术.这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率.JQuery本身提供 ...

随机推荐

  1. 【转载】对一致性Hash算法,Java代码实现的深入研究

    原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...

  2. BZOJ3040 最短路(road)

    题意 N个点,M条边的有向图,求点1到点N的最短路(保证存在). \(1 \leq N \leq 1000000,1 \leq M \leq 10000000\) 前T条边采用如下方式生成: 初始化x ...

  3. 积累 ---- PHP可能会遇到的面试题

    1.白盒测试和黑盒测试的区别 2.Bootstrap是什么 3.OOP是什么意思 4.git和svn的使用 5.常用的git命令 6.lamp开发环境 7.高内聚,低耦合

  4. Spring AOP声明式事务异常回滚

    近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事物回滚throw ne ...

  5. 关于android api 23 +的权限问题

    Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, n ...

  6. php excel 设置单元格格式为文本格式

    学习源头:https://www.cnblogs.com/php-linux/p/6179442.html 解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制 ...

  7. spring-session之二:简单配置

    官方示例:https://docs.spring.io/spring-session/docs/current/reference/html5/#samples 配置Spring Session 在W ...

  8. IntelliJ IDEA中如何设置忽略@param注释中的参数与方法中的参数列表不一致的检查

  9. python开发mysql:索引

    一,索引管理 索引分类: 普通索引INDEX:加速查找 唯一索引: -主键索引PRIMARY KEY:加速查找+约束(不为空.不能重复) -唯一索引UNIQUE:加速查找+约束(不能重复) 联合索引: ...

  10. Sqoop导出MySQL数据

    导入所有表: sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password p ...