jQuery中proxy()函数的用法

$.proxy 方法接受一个已有的函数,并返回一个带特定上下文的新的函数。
该方法通常用于向上下文指向不同对象的元素添加事件

  • function 要被调用的已有的函数。
  • context 函数所在的对象的名称。
  • name 已有的函数,其上下文将被改变(应该是 context 对象的属性)。
//正常的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); 
});
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,200评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,367评论 0 2
  • 转载 前端开发面试题 <a name='preface'>前言</a> 本文由我收集总结了一些前端面试题,初学者阅...
    小九喵喵阅读 478评论 0 0
  • 前言 不管是开发 Android 已久的老司机,还是刚刚上车的新司机,都肯定会对一件事情深恶痛绝:图片适配(尤其是...
    lypeer阅读 3,251评论 3 48