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