$.proxy用法(解決this轉移問題)


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

$('#myElement').click(function() {
    setTimeout(function() {
        // 這個this指向的是settimeout函數內部,而非之前的html元素
        $(this).addClass('aNewClass');
    }, 1000);
});

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

$('#myElement').click(function() {
    var that = this;     //用that變量把this儲存起來
    setTimeout(function() {
        $(that).addClass('aNewClass');
    }, 1000);
});

但是,在使用了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