1.jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法。由全局函数来调用, 主要是用来拓展个全局函数
  2.jQuery.fn.extend(object);为jQuery的实例对象添加方法 由实例对象来调用,可以用来拓展个选择器,例如$.fn.each();

extend

添加静态方法,直接用$在其他地方来调用此扩展方法了

$.extend({
test:function(param){
alert(param);
}
});
$.test(1);//则直接弹出1

$.test(1)变成了jQuery这个类本身的方法。

extend扩展:

  • extend([deep ], target, object1,object2,object3,objectN)

将object1,object2,object3,...合并到target中,返回值为合并后的target,由此可以看出该方法合并后,是修改了target的结构的。

后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。

deep :Boolean 设置为true 为深拷贝

fn.extend

 $.fn.extend({
test:function(){
alert("1");
}
}); $("div").test();

test()变成了jQuery实例化对象的方法。

深浅拷贝

如果给一个变量赋值一个对象 ,那么两者的值会是同一个引用,改变其中一方,另一方也会相应改变。

通过 Object.assign 进行浅拷贝即可解决 

let a = {
name: "小明"
}
let b = Object.assign({}, a)
a.name = "小文";
console.log(b.name) // "小明"
// 也可以通过展开运算符(…)解决 let b = {...a}
a.obj.name="小文";
console.log(b.name) //"小明";

浅拷贝只解决了第一层的问题,如果接下去的值中还有对象的话,两者会有相同的引用。

let a = {
name: "小明",
obj:{
name:"小汪"
}
}
let b = {...a}
a.obj.name="小文";
console.log(b.obj.name) //"小文";

可以通过 JSON.parse(JSON.stringify(object)) 来解决。

let a = {
name: "小明",
obj:{
name:"小汪"
}
}
let b = JSON.parse(JSON.stringify(a))
a.obj.name="小文";
console.log(b.obj.name) //"小汪";

该函数是内置函数中处理深拷贝性能最快的,但是该方法也是有局限性的:

  • 会忽略 undefined
  • 不能序列化函数
  • 不能解决循环引用的对象
let a = {
a: undefined,
b: function() {},
c: 'yck'
}
let b = JSON.parse(JSON.stringify(a))
console.log(b) // {c: "yck"}

当然如果你的数据中含有以上三种情况下,可以使用 lodash 的深拷贝函数。

如果你所需拷贝的对象含有内置类型并且不包含函数,可以使用 MessageChannel

 function structuralClone(obj) {
return new Promise(resolve => {
const {port1, port2} = new MessageChannel();
port2.onmessage = ev => resolve(ev.data);
port1.postMessage(obj);
});
} var obj = {a: 1, b: {
c: b
}}
// 注意该方法是异步的
// 可以处理 undefined 和循环引用对象
const clone = await structuralClone(obj);

jQuery开发插件的两个方法 js 深浅拷贝的更多相关文章

  1. jQuery开发插件的两种方式

    最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验 ...

  2. java开发——Cloneable接口、clone()方法和深浅拷贝

    1.实现Cloneable接口表明该类的对象是允许克隆的. 2.允许克隆的意思是:可以调用clone()方法. 3.深拷贝还是浅拷贝,取决于如何重写Object的clone()方法. 4.原对象和克隆 ...

  3. jQuery中开发插件的两种方式

    jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...

  4. 获取网页URL地址及参数等的两种方法(js和C#)

    转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript&q ...

  5. 安装jenkins插件的两种方法

    安装jenkins插件有两种方法,一种是在线安装,一种是离线安装.两种方式介绍如下: 1.如果服务器可以上网,那边选择在线安装最好不过了,安装流程为:系统管理----插件管理---选择需要的插件直接安 ...

  6. Jquery开发插件的方法

    Jquery未开发插件提供了两个方法: (1)Jquery.extend(object)    -为Jquery类本身添加新的方法;代码如下: $.extend({ add:function(a,b) ...

  7. jQuery中开发插件的两种方式(附Demo)

    做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQu ...

  8. div随页面滚动遇顶固定的两种方法(js&jQuery)

    一.遇顶固定的例子 我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫“层的智能浮动效果”.目前我们在国内的商业网站上就常常看到这样的效果了.例如 ...

  9. 用jQuery开发插件详解

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

随机推荐

  1. RN控件之DrawerLayoutAndroid导航栏

    /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import Rea ...

  2. 《精通Spring4.X企业应用开发实战》读后感第六章(内部工作机制、BeanDefinition、InstantiationStrategy、BeanWrapper)

  3. PAM认证

    PAM认证 摘自: http://www.cnblogs.com/shenxm/p/8451889.html PAM(Pluggable Authentication Modules) Sun公司于1 ...

  4. Sharepoint foundation2013独立安装教程

    Sharepoint foundation2013安装教程 一,什么是sharepoint foundation2013 大家都知道Sharepoint是一个非常强大的企业级开发平台,它包含各种功能比 ...

  5. [WIP]php 基本语法

    创建: 2019/06/14 https://www.php.net/manual/zh/langref.php php标记   当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?ph ...

  6. 洛谷P1171 售货员的难题

    P1171 售货员的难题 题目背景 数据有更改 题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且 ...

  7. 【NOIP模拟赛】收银员(一道差分约束好题)

    /* s[]表示最优方案的序列中的前缀和,那么s[23]就是最优方案 由题意我们可以列出这样一些式子: s[i]+s[23]-s[16+i]>=a[i] (i-8<0) s[i]-s[i- ...

  8. django的models字段介绍

    #增加数据库数据方法#方法1CalcData.objects.create(var1 ='21',var2='22')#方法2obj =CalcData(var1 ='21',var2='22')jo ...

  9. 不建议使用Restsharp

    Restsharp确实是个优秀的插件,它最大的特点是内置了JsonConverter, 在一定程度上简化了HttpWebRequest的使用,在nuget上面有19.3M的下载量,是个很好的证明. 但 ...

  10. 解决eclipse双击类名、选中类名出现假死或者非常慢的问题(取消Eclipse鼠标悬停和自定义快捷键)

    eclipse(MyEclipse)关闭鼠标移动提示代码功能和自定义快捷键代码提示设置的方法 eclipse(MyEclipse)关闭鼠标移动提示代码功能: eclipse(MyEclipse)--& ...