在我的博客中,曾经写过一篇关于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. #507. 「LibreOJ NOI Round #1」接竹竿 dp

    题目: 题解: 我们考虑把每对花色相同的牌看作区间. 那么如果我们设 \(f_i\) 表示决策在 \([1,i]\) 内的最优答案. 那么有 \(f_i = max\{max\{(f_{j-1}+\s ...

  2. 【模板】NOIP模板汇总

    图论 数据结构 数学 其他: 洛谷模板:a,b两个字符串,求b串在a串中出现的位置 #include<iostream> #include<cstdio> #include&l ...

  3. Jam的计数法

    Jam的计数法 题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数 ...

  4. eclipse 中xml文件的字体改不了

    XML Editor的改不了. 修改colors & fonts里的eclipse中打开window->prefece->generation-basic 下 Text Edito ...

  5. sublime 工具

    http://blog.csdn.net/admin_yi/article/details/53608965

  6. CRC码计算

    循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误. 1. CRC校验原理 CRC校验原理看起来比较复杂,好难 ...

  7. 华为公司内部培训资料_介绍RTSP的消息、信令等

    https://wenku.baidu.com/view/b10415dabd64783e08122b9c.html

  8. I/O通信模型(BIO,NIO,AIO)

    一.传统的BIO 网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请 ...

  9. Linux学习笔记 -- yum 使用

    yum是什么 yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 她基于RPM包管理,能够从指定的服务器 ...

  10. day-7心得

    面向对象高级语法部分 经典类vs新式类 把下面代码用python2 和python3都执行一下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...