javascript 之 扩展对象 jQuery.extend
在JQuery的API手册中,extend方法挂载在JQuery 和 JQuery.fn两个不同的对象上,但在JQuery内部代码实现的是相同的,只是功能各不相同。
官方解释:
- jQuery.extend Merge the contents of two or more objects together into the first object. 把两个或者多个对象合并到第一个对象当中; 
- jQuery.fn.extend Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods. 把对象挂载到 jQuery 的 prototype 上以扩展一个新的 jQuery 实例方法 。 
一、合并对象
语法:jQuery.extend(target [,object1] [,objectN]);
案例:这只是浅度拷贝
var obj1={ name :'Tom',age:21};
var obj2={name:'Jerry',sex:'boy'};
console.log($.extend({},obj1,obj2));
输出:{name: "Jerry", age: 21, sex: "boy"}
二、深浅拷贝
语法:jQuery.extend([deep] , target , object1 [ , objectN]);
对比:该语法与上面的描述多了一个boolean类型的【deep】传参,当为true是,将 object1, objectN深度复制后合并到target中。
案例:先来对比一下,理解什么是深度复制,什么是浅度复制的区别
var obj1={
    name="John",
    location:{
       city:"Boston",
       county:"USA"
   }
}
var obj2 = {
    last: "Resig",
    location: {
        state: "MA",
        county: "China"
    }
}
$.extend(false, {}, obj1, obj2); // { name: "John", last: "Resig", location: { state: "MA", county: "China" }}
$.extend(true, {}, obj1, obj2); // { name: "John", last: "Resig", location: { city: "Boston", state: "MA", county: "China" }}
总结:从这里可以看出,深度复制会递归遍历每个对象中含有复杂对象(如:数组,函数,json对象等)
三、jQuery.fn.extend 和 jQuery.extend 的区别
概念: 类方法 和 实例方法
类方法:是直接可以使用类引用,不需要实例化就可以使用的方法,一般在项目中类方法都是被设置为工具类使用
实例方法:必须创建实例,然后才能通过实例调用 实例方法
说明:jQuery 是一个封装的很好的类,可以使用jQuery选择器来创建jQuery来创建jQuery的实例,比如:使id选择器$('#btn')来创建一个实例
区别:
1、jQuery.extend(object);相当于对类方法的扩展 ,可以理解为静态方法
jQuery.extend({
   min:function(a,b){ return a<b?a:b }
   max:function(a,b){return a>b?a:b }
})
jQuery.min(2,3);
jQuery.max(4,5)
2、jQuery.fn.extend=jQuery.prototype.extend;相当于对实例方法的扩展
$.fn.extend({
   setRed:function(){
       $(this).css("color","red");
   }
})
$('.tip').setRed();
说明:$(".tip")创建了一个jQuery实例,通过它可以调用成员方法setRed
2.1、以上代码可以实现预想的扩展,最好返this以满足jQuery链式操作的需要
改良后的代码
$.fn.extend(){
red:function(){
return $(this).css("color","red");
}
}
javascript 之 扩展对象 jQuery.extend的更多相关文章
- jquery插件的2种扩展开发(jQuery.extend和jQuery.fn.extend的区别)
		1.类级别 jQuery.extend(object) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQu ... 
- javascript 之 扩展对象
		注意点:在js中常见的几种方进行扩展 第一种:ES6提供的 Object.assign(); 第二种:ES5提供的 extend()方法 第三种:Object对象提供的 defineProperty( ... 
- javascript 之 扩展对象 Object.assing
		语法:Object.assign(target,...source) 说明:Object.assign方法的第一个参数是目标对象,后面的参数都是源对象 一.以对象为参数的合并 1.第一个参数都是对象, ... 
- JavaScript学习总结(四)——jQuery插件开发与发布
		jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ... 
- jQuery.fn和jQuery.prototype jquery.extend() jquery.fn.extend()区别介绍
		这里的 jQuery , jQuery.fn , jQuery,fn,init ,jQuery,prototype 都代表什么. 来看下jQuery的源码是怎么样定义的: (function( win ... 
- JavaScript学习总结(五)——jQuery插件开发与发布
		jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ... 
- jQuery  extend 方法使用 (转)
		方法介绍 jQuery 的 API 手册中,extend 方法挂载在 jQuery 和 jQuery.fn 两个不同的对象上,但在 jQuery 内部代码实现的是相同的,只是功能各不相同. 先看看官方 ... 
- jQuery.fn.extend和jQuery.extend
		<script src="http://www.cssrain.cn/demo/JQuery+API/jquery-1[1].2.1.pack.js" type=" ... 
- jquery extend源码解析
		$.extend(obj1,0bj2,{"name":"s","age":22}) //target 要拷贝到哪个对象上 // i 要执行拷 ... 
随机推荐
- Linux系列 | Ubuntu 各版本号和名称对照【转】
			转载处:https://blog.csdn.net/songfulu/article/details/85310273 版本 开发代号 中译 发布日期 支持结束时间 内核版本 桌面版 服务器版 4 ... 
- Python 23种设计模式全(python例子)
			从今年5月份开始打算把设计模式都写到博客里,持续到现在总算是写完了.写的很慢,好歹算是有始有终.对这些设计模式有些理解的不准确,有些甚至可能是错的,请看到的同学拍砖留言.内容来源很杂,大部分参考或者摘 ... 
- windows驱动程序中的预处理含义
			#pragma code_seg(“PAGE”) 作用是将此部分代码放入分页内存中运行. #pragma code_seg() 将代码段设置为默认的代码段 #pragma code_seg(&q ... 
- Spring cloud微服务安全实战-6-5jwt改造之日志及错误处理(1)
			在代码里,我们没有认证或者授权的filter.认证和授权的工作现在基本上完全由Spring Security的过滤器接管了. 本节就来看下 如何在Spring Security的过滤器链上加入我们自己 ... 
- Spring cloud微服务安全实战-4-7重构代码以适应真实环境
			现在有了认证服务器,也配置了资源服务器.也根据OAuth协议,基于令牌认证的授权也跑通了.基本的概念也有了简单的理解. 往下深入之前,有几个点,还需要说一下 使用scopes来控制权限,scopes可 ... 
- 【composer】 PHP composer 镜像地址更换
			如果你使用的是 laravel-china.org 得 composer 镜像.那么近期执行更新时候就会报错: 莫慌,这是因为 laravel-china.org 已经停止了对composer得更新. ... 
- CentOS7下使用Sentinel实现Redis集群高可用
			Sentinel是Redis官方提供的一种高可用方案(除了Sentinel,Redis Cluster是另一种方案),它可以自动监控Redis master/slave的运行状态,如果发现master ... 
- 报错:Error while fetching metadata with correlation id 67 : {alarmHis=LEADER_NOT_AVAILABLE}
			报错背景: 单机安装了kafka,创建完成主题,启动生产者的时候产生报错现象.报错时持续不断打印日志信息. 报错现象: [-- ::,] WARN [Producer clientId=console ... 
- 单独使用MyBatis的简单示例
			单独使用MyBatis的简单示例:mybaties-config.xml:MyBatis配置文件 <?xml version="1.0" encoding="UTF ... 
- 【JQuery Zepto插件】图片预加载
			屏幕滚动到图片当前位置加载图片,把图片的真实地址写到data-src属性里即可. <img src="占位图" data-src="img/foot.jpg&quo ... 
