jQuery 中的proxy方法

在某些狀況下,咱們調用Javascript函數時候,this指針並不必定是咱們所指望的那個。例如:html

複製代碼
 1 //正常的this使用
 2 $('#myElement').click(function() {
 3 
 4     // 這個this是咱們所指望的,當前元素的this.
 5 
 6     $(this).addClass('aNewClass');
 7 
 8 });
 9 
10 
11 //並不是所指望的this
12 $('#myElement').click(function() {
13 
14     setTimeout(function() {
15 
16           // 這個this指向的是settimeout函數內部,而非以前的html元素
17 
18         $(this).addClass('aNewClass');
19 
20     }, 1000);
21 
22 });
複製代碼

這時候怎麼辦呢,一般的一種作法是這樣的:jquery

複製代碼
 1 $('#myElement').click(function() {
 2     var that = this;   //設置一個變量,指向這個須要的this
 3 
 4     setTimeout(function() {
 5 
 6           // 這個this指向的是settimeout函數內部,而非以前的html元素
 7 
 8         $(that).addClass('aNewClass');
 9 
10     }, 1000);
11 
12 });
複製代碼

可是,在使用了jquery框架的狀況下, 有一種更好的方式,就是使用$.proxy函數。框架

jQuery.proxy(),接受一個函數,而後返回一個新函數,而且這個新函數始終保持了特定的上下文(context )語境。函數

有兩種語法:this

複製代碼
jQuery.proxy( function, context )
/**function將要改變上下文語境的函數。
** context函數的上下文語境(`this`)會被設置成這個 object 對象。
**/

jQuery.proxy( context, name )
/**context函數的上下文語境會被設置成這個 object 對象。
**name將要改變上下文語境的函數名(這個函數必須是前一個參數 ‘context’ **對象的屬性)
**/
複製代碼

上面的例子使用這種方式就能夠修改爲:spa

複製代碼
$('#myElement').click(function() {

    setTimeout($.proxy(function() {

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

    }, this), 1000);



});
複製代碼
相關文章
相關標籤/搜索