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实现前端分页功能
Mar 23 jQuery
jQuery Tree Multiselect使用详解
May 02 jQuery
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
jQuery表单设置值的方法
Jun 30 jQuery
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
jQuery实现文件编码成base64并通过AJAX上传的方法
Apr 12 jQuery
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 jQuery
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
jQuery实现异步上传一个或多个文件
Aug 17 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
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python、Javascript中的闭包比较
2015/02/04 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
网络安全方面的面试题
2015/11/04 面试题
生产部统计员岗位职责
2014/01/05 职场文书
记帐员岗位责任制
2014/02/08 职场文书
婚礼秀策划方案
2014/05/19 职场文书
车辆年检委托书范本
2014/10/14 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
九年级历史教学反思
2016/02/19 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书