jquery $.proxy使用


在某些情況下,我們調用Javascript函數時候,this指針並不一定是我們所期望的那個。例如:

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

這時候怎么辦呢,通常的一種做法是這樣的:

 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 )語境。

有兩種語法:

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

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

上面的例子使用這種方式就可以修改成:

$('#myElement').click(function() {

    setTimeout($.proxy(function() {

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

    }, this), 1000);



});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM