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 相关文章推荐
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
May 05 jQuery
jquery Form轻松实现文件上传
May 24 jQuery
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
jQuery带控制按钮轮播图插件
Jul 31 jQuery
jquery简易手风琴插件的封装
Oct 13 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
PHP 木马攻击防御技巧
2009/06/13 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
jscript之List Excel Color Values
2007/06/13 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
Python装饰器原理与用法分析
2018/04/30 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
自荐信写法介绍
2014/01/25 职场文书
高中运动会广播稿
2014/09/16 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js