再谈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本身提供 ...
随机推荐
- TortoiseGit不同分支合并代码2
现在有主分支master和分支day2.现在要把day2上的变更合并到主分支master上! 1.首先切换到目标分支master上. 说明当前分支是master分支. 2.在master分支上查看提交 ...
- C语言中的printf函数的输入输出问题
这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了. 这里要注意的是,printf函数是从右向左计算,从左向右输出. 距离如下: #include <stdio.h&g ...
- debian下ror新建项目报错解决
一个是缺少mysql的开发包 sudo apt-get install libmysqld-dev 还有一个报错如下 debian ExecJS::RuntimeUnavailable: Could ...
- Php header()函数及其常见使用
语法: Void header(string $string[,bool $replace=true [, int $http_response_code) 向客户端发送原始的HTTP报头 需注意: ...
- python开发socket套接字:粘包问题&udp套接字&socketserver
一,发生粘包 服务器端 from socket import * phone=socket(AF_INET,SOCK_STREAM) #套接字 phone.setsockopt(SOL_SOCKET, ...
- Linux平台总线驱动设备模型
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为pl ...
- python's twenty-first day for me 抽象类和接口类以及多态
归一化设计: 不管是哪一个类的对象,都调用同一个函数去完成相似的功能. class Alipay: def pay(self,money): print('使用支付宝支付了%s' % money) c ...
- php各版本编译好的扩展模块下载地址
php各版本[,x86/64 v9/v11/v14 nts/ts]编译好的扩展模块下载地址: https://windows.php.net/downloads/pecl/releases/ ht ...
- Keepalived使用小结
编译安装 1.安装环境 CentOS release 6.4 Based on Linux 2.6.32,安装1.2.9,没问题 在Red Hat Enterprise Linux Server re ...
- Jquery改变td内容为1的颜色
Jquery改变td内容为1的颜色<table id="tb" > <tr> <td val="1">1</td> ...