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); 
});

你可能感兴趣的:(jQuery中proxy()函数的用法)