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实现放大镜简洁代码(推荐)
Jun 08 jQuery
jQuery为某个div加入行样式
Jun 09 jQuery
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
jQuery plugin animsition使用小结
Sep 14 jQuery
jQuery实现的简单动态添加、删除表格功能示例
Sep 21 jQuery
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
jquery登录的异步验证操作示例
May 09 jQuery
jQuery实现二级导航菜单的示例
Sep 30 jQuery
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
Oct 09 jQuery
jquery插件实现代码雨特效
Apr 24 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
Terran剧情介绍
2020/03/14 星际争霸
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
js实现扫雷小程序的示例代码
2017/09/27 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
2013的个人自我评价
2013/12/26 职场文书
大学校园活动策划书
2014/02/04 职场文书
军人违纪检讨书
2014/02/04 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
长城导游词300字
2015/01/30 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
物资采购管理制度
2015/08/06 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
关于python爬虫应用urllib库作用分析
2021/09/04 Python
青岛市的收音机研制与生产
2022/04/07 无线电
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python