在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");
}
}

  

  

 

  

最新文章

  1. 判断.NET4.0是否安装
  2. 关于启用 HTTPS 的一些经验分享(一)
  3. 【VB6】使用VB6创建和访问Dom树【爬虫基础知识 】
  4. 矢量Chart图表嵌入HTML5网络拓扑图的应用
  5. NGUI 之 不为人知的 NGUITools
  6. spring jdbcTemplate query
  7. 以Self Host的方式来寄宿Web API
  8. 解决ashx文件下的Session“未将对象引用设置到对象的实例”
  9. security
  10. html5 web worker
  11. C GOTO使用示例
  12. vue2.0 实现全选和全不选
  13. 解决eclipse使用tomcat启动项目后访问项目404的问题
  14. 有状态(Stateful)与无状态(Stateless)
  15. mysql处理重复数据
  16. java lang(ClassLoader)
  17. WebView 错误码整理
  18. ELK之elasticsearch6安装认证模块search guard
  19. prometheus的agent 二次开发代码参考
  20. Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-3-Django项目实例

热门文章

  1. bat 获取 exe 文件中 产品版本号并存储到变量中
  2. snmpwalk 安装与使用详解-windows下
  3. 读《中国人工智能与 IJCAI 的 40 周年,还有哪些未曾对外诉说的故事?》
  4. 001——Angular环境搭建、运行项目、搭建项目
  5. Web.Config中配置字符串含引号的处理
  6. 【Linux】 新建用户并授权
  7. Linux记录-mysql服务管理shell实现
  8. Laya的屏幕适配,UI组件适配
  9. HTTP请求重复发送
  10. 【Leetcode_easy】849. Maximize Distance to Closest Person