JavaScript自执行函数和jQuery扩展方法详解


Posted in jQuery onOctober 27, 2017

我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件。但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题。那么如何解决这个问题呢?作用域隔离。在JS中,作用域是通过函数来划分的,将JS代码封装到函数中进行调用可以避免变量名/函数名冲突的问题,但是这也并不是万无一失,因为封装函数本身有可能和其它函数重名,解决方案:自执行函数。

自执行函数是用一对圆括号将匿名函数包起来,加括号(传参)会立即执行。因为函数无名字,实现了作用域的绝对隔离和函数名的冲突问题。基本形式如下:

(function () {
  console.log('do something');
})();

比如我们在custome.js文件中写了一些JS逻辑,并封装到函数init中。我们用自执行函数将自己定义的函数init包起来,就像下面这样。

(function () {

  function init() {
    console.log('execute init...');
  }

  init();
})();

当我们在html中引入custome.js:<script src="custome.js"></script>,自执行函数会立即执行,进而执行内部定义的init函数:

不过,自执行函数立即执行的特性,使其很难调用。通过定义jQuery扩展方法,可以解决这一问题,拿到自执行函数调用和执行的主动权。

首先我们看一下定义jQuery扩展方法的基本形式:

jQuery.extend({
  'myMethod': function () {
    console.log('do something');
  }
});

这样,通过$.myMethod()或jQuery.myMethod()就可以调用上面定义的方法。

定义jQuery扩展方法还有另外一种方式:.fn

jQuery.fn.extend({
  'myMethod': function () {
    console.log('do something');;
  }
});

通过如上方式定义的扩展方法,需要通过jQuery选择器调用,比如通过标签选择器$("button").myMethod(args)

了解了JS自执行函数和jQuery扩展方法后,我们将二者结合起来。

下面我们利用自执行函数立即执行的特点,来定义jQuery扩展方法:

(function (jq) {

  function init() {
    console.log('do something');
  }

  jq.extend({
    'myMethod': function () {
      init();
    }
  })
})(jQuery);

说明,这个自执行函数接收jQuery对象作为参数,然后在内部为jQuery定义一个扩展方法myMethod,该方法执行真正的逻辑代码init函数

调用:

<script src="jquery-3.2.1.js"></script>
<script src="custome.js"></script>
<script>

 $(function () {
  $.myMethod();
 });

</script>

说明:

jQuery文件引入后,jQuery对象全局可用;
紧接着引入自定义JS文件custome.js,其中的自执行函数接收jQuery对象为参数,立即执行,在内部为jQuery定义一个扩展方法myMethod
然后我们就可以在页面加载完成后,通过调用$.meMethod()或jQuery.myMethod()来执行init函数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jquery仿微信聊天界面
May 06 jQuery
jQuery手风琴的简单制作
May 12 jQuery
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
jQuery获取table表中的td标签(实例讲解)
Jul 28 jQuery
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
JQuery 选择器、DOM节点操作练习实例
Sep 28 jQuery
jQuery实现的鼠标滚轮控制图片缩放功能实例
Oct 14 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 jQuery
jQuery实现判断上传图片类型和大小的方法示例
Apr 11 jQuery
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 #jQuery
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 #jQuery
jquery select插件异步实时搜索实例代码
Oct 20 #jQuery
利用jQuery实现简单的拖曳效果实例代码
Oct 20 #jQuery
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
Oct 20 #jQuery
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 #jQuery
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 #jQuery
You might like
239军机修复记
2021/03/02 无线电
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
javascript CSS画图之基础篇
2009/07/29 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
Django app配置多个数据库代码实例
2019/12/17 Python
python实现用户名密码校验
2020/03/18 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
python定义类的简单用法
2020/07/24 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
医院实习接收函
2014/01/12 职场文书
温馨提示标语
2014/06/26 职场文书
远程培训的心得体会
2014/09/01 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android