再谈JQuery插件$.extend(), $.fn和$.fn.extend()
在我的博客中,曾经写过一篇关于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()的更多相关文章
- 再谈Jquery Ajax方法传递到action 【转载】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/984466 之 ...
- 再谈Jquery Ajax方法传递到action
原始出处 :http://cnn237111.blog.51cto.com/2359144/984466 本人只是转载 原文如下: 假设 controller中的方法是如下: public Act ...
- 再谈Jquery Ajax方法传递到action(转)
之前写过一篇文章Jquery Ajax方法传值到action,本文是对该文的补充. 假设 controller中的方法是如下: public ActionResult ReadPerson(Perso ...
- Jquery自定义插件之$.extend()、$.fn和$.fn.extend()
jquery插件的种类: 1.对象级别的插件开发,即给jQuery对象添加方法,封装对象方法的插件,如:parent().appendTo() 2.一种是类级别的插件开发,即给jQuery添加新的全局 ...
- [JS] 理解jquery的$.extend()、$.fn和$.fn.extend()
jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); jQuery.fn jQuery.fn = jQuery.prototype ...
- $.extend()、$.fn和$.fn.extend()
理解$.extend().$.fn和$.fn.extend() 原文链接:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.ht ...
- JQuery $ $.extend(),$.fn和$.fn.extend javaScript对象、DOM对象和jQuery对象及转换 工具方法(utility)
一.为什么jquery前面要写$ Javascript没有package的概念,而作者又希望所有jQuery相关的API都能通过一个全局性的对象来容纳. 名为jQuery的全局变量就是这样一个对象,不 ...
- 如何创建一个自定义jQuery插件
简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...
- 动手Jquery插件
自己动手Jquery插件 最近Web应用程序中越来越多地用到了JQuery等Web前端技术.这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率.JQuery本身提供 ...
随机推荐
- sqlalchemy的基本的使用
参考链接:http://www.techweb.com.cn/network/system/2016-10-11/2407638.shtml http://www.cnblogs.com/renfan ...
- manyToManyField理解和用法
转:http://www.cnblogs.com/linxiyue/p/3667418.html
- 一分钟理解js闭包
什么是闭包?先看一段代码: ? 1 2 3 4 5 6 7 8 9 10 function a(){ var n = 0; function inc() { n++; cons ...
- Bundle的使用
a.Activity1发送: Intent intent = new Intent(); intent.setClass(activity1.this, activity2.class); / ...
- FPGA中的“门”
逻辑门 在ASIC的世界里,衡量器件容量的常用标准是等效门.这是因为不同的厂商在单元库里提供了不同的功能模块,而每个功能模块的实现都要求不同数量的晶体管.这样在两个器件之间比较容量和复杂度就很困难. ...
- java代码,实现输入编号,输出对应水果的单价~~~~
总结:总感觉有问题,因为输出我写的太不对劲了,直接把price的价格写了出来然输出显示…… package com.badu; import java.util.Scanner; //从键盘输入次数, ...
- Jenkins+SVN+maven+Tomcat构建自动化集成任务
Jenkins安装方法详解:https://www.cnblogs.com/lizhe860/p/9901257.html 一.安装maven插件 1.依次进入系统管理→插件管理→可选插件, 找到Ma ...
- Java面试(三)
1 java中Exception 和 Error 区别 都是Throwable的子类.RuntimeException继承自Exception. Error和RuntimeException及其子类 ...
- SQL2008R转SQL2005
1.SQL2008R生成 任务--生成脚本 “为服务器版本编写脚本”:SQL Server 2005 “要编写脚本的数据类型”:架构和数据 2.SQL2005还原超大sql语句文件 运行-cmd: o ...
- Unity3D的坑系列:你真想发布WinPhone版吗?
Unity 4.2加入了支持WinPhone发布,本来是一件令人开心的事情,不过最近听了Unity技术支持的一个事情后就发现,原来发布WinPhone版也是一个坑. 实际上如果你用Unity做小游戏发 ...