实例解析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 相关文章推荐
jQuery 解析xml文件
Aug 09 Javascript
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
Javasipt:操作radio标签详解
Dec 30 Javascript
微信小程序  modal弹框组件详解
Oct 27 Javascript
Javascript中八种遍历方法的执行速度深度对比
Apr 25 Javascript
详解webpack打包vue时提取css
May 26 Javascript
JS按钮闪烁功能的实现代码
Jul 21 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
webpack学习教程之前端性能优化总结
Dec 05 Javascript
Angular2实现的秒表及改良版示例
May 10 Javascript
javascript操作元素的常见方法小结
Nov 13 Javascript
vue实现购物车列表
Jun 30 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
Vue中props的使用详解
2018/06/15 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
django富文本编辑器的实现示例
2019/04/10 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
10个示例带你掌握python中的元组
2020/11/23 Python
python中spy++的使用超详细教程
2021/01/29 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
创业大赛策划书
2014/03/01 职场文书
合伙购房协议样本
2014/10/06 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
普通党员整改措施
2014/10/24 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
留学推荐信英文范文
2015/03/26 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
python自动化测试之Selenium详解
2022/03/13 Python
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫