实例解析jQuery中proxy()函数的用法


Posted in Javascript onMay 24, 2016

jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。

jQuery.proxy( function, context )

function将要改变上下文语境的函数。

context函数的上下文语境(`this`)会被设置成这个 object 对象。

jQuery.proxy( context, name )

context函数的上下文语境会被设置成这个 object 对象。

name将要改变上下文语境的函数名(这个函数必须是前一个参数 ‘context' 对象的属性)

这个方法通常在向一个元素上附加事件处理函数时,上下文语境实际是指向另一个对象的情况下使用。

另外,jQuery 能够确保即使你绑定的函数是经过 jQuery.proxy() 处理过的函数,你依然可以用原先的函数来正确地取消绑定。

参数:
function:Function类型需要更改上下文对象的函数。
context:任意类型指定为函数设置的上下文对象。
name:String类型需要更改上下文对象的函数名称(它应该是context的一个属性)。
additionalArguments 可选/任意类型指定调用该函数时需要传入的参数,参数可以有任意多个。

注意事项:
参数additionalArguments是从 jQuery 1.6 开始支持的。
该方法非常适用于在附加事件处理函数时,将事件处理函数的上下文指向另一个对象。此外,jQuery确保:即使你使用jQuery.proxy()返回的"代理"函数来绑定事件,如果你在解除绑定时传入原函数,jQuery仍然可以正确解除绑定。
从jQuery 1.9 开始,如果context为null或undefined,则"代理"函数的上下文不会发生更改。这将允许jQuery.proxy()只传入函数的参数,而不更改函数的上下文。

实例

我们先看个例子:

//正常的this使用
$('#Haorooms').click(function() {

  // 这个this是我们所期望的,当前元素的this.

  $(this).addClass('aNewClass');

});
//并非所期望的this
$('#Haorooms').click(function() {

  setTimeout(function() {

     // 这个this指向的是settimeout函数内部,而非之前的html元素

    $(this).addClass('aNewClass');

  }, 1000);

});

这时候怎么办呢,通常的一种做法是这样的:

$('#Haorooms').click(function() {
  var that = this;  //设置一个变量,指向这个需要的this

  setTimeout(function() {

     // 这个this指向的是settimeout函数内部,而非之前的html元素

    $(that).addClass('aNewClass');

  }, 1000);

});

但是,在使用了jquery框架的情况下, 有一种更好的方式,就是使用$.proxy函数。

有两种语法:

jQuery.proxy( function, context )
/**function将要改变上下文语境的函数。
** context函数的上下文语境(`this`)会被设置成这个 object 对象。
**/

jQuery.proxy( context, name )
/**context函数的上下文语境会被设置成这个 object 对象。
**name将要改变上下文语境的函数名(这个函数必须是前一个参数 ‘context' **对象的属性)
**/

上面的例子使用这种方式就可以修改成:

$('#Haorooms').click(function() {

  setTimeout($.proxy(function() {

    $(this).addClass('aNewClass'); 

  }, this), 1000);

});
Javascript 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
javascript 通用简单的table选项卡实现
May 07 Javascript
JS简单的轮播的图片滚动实例
Jun 17 Javascript
Javascript堆排序算法详解
Dec 03 Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
基于Vue-cli快速搭建项目的完整步骤
Nov 03 Javascript
浅谈JavaScript闭包
Apr 09 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
Jun 10 Javascript
jQuery前端开发35个小技巧
May 24 #Javascript
JS+Canvas绘制时钟效果
Aug 20 #Javascript
基于JQuery实现图片上传预览与删除操作
May 24 #Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 #Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 #Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
May 24 #Javascript
倾力总结40条常见的移动端Web页面问题解决方案
May 24 #Javascript
You might like
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
Python代码解决RenderView窗口not found问题
2016/08/28 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
Python中Qslider控件实操详解
2021/02/20 Python
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
英文简历中的自我评价用语
2013/12/09 职场文书
入党自我评价优缺点
2014/01/25 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
安全保证书范文
2014/04/29 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android