JQuery中this的指向詳解
JavaScript中的this不總是指向當前對象,函數(shù)或類中的this指向與調(diào)用這個函數(shù)的對象以及上下文環(huán)境是息息相關的。
如在全局作用域調(diào)用一個含this的對象,此時當前對象的this指向的是window。
為了讓this的指向符合自己的意愿,JavaScript提供了兩個方法用以改變this的指向,它們是call和apply,當然也有利用閉包來實現(xiàn)的方法。
在Jquery 中的this的指向是怎么樣的呢?
一、Ajax回調(diào)函數(shù)中的this
默認情況下指向AJAX配置對象ajaxSettings。
在jQuery內(nèi)部是用s.success代替?zhèn)魅氲幕卣{(diào)函數(shù)去執(zhí)行的,而success的調(diào)用對象就是s,即ajaxSettings對象的縮寫。
var socket =
{
connect: function(host, port)
{
alert('Connecting socket server,host:' + host + ',port:' + port);
}
};
//一個即時通訊類,其中connect方法還將作為AJAX回調(diào)函數(shù)被調(diào)用
function classIm()
{
this.host = '192.168.1.28';
this.port = '8080';
this.connect = function(data)
{
socket.connect(this.host, this.port);
};
}
var IM = new classIm();
$.get('CheckWebLogin.aspx', IM.connect);
//彈出的host與port都是undefined。如果希望AJAX回調(diào)函數(shù)代碼socket.connect(this.host, this.port)中的this指向類classIm的實例對象IM,或者說是想socket.connect()方法能得到正確的參數(shù)值,大致有下面幾種方法:
1、設置ajax的context選項
將Ajax回調(diào)函數(shù)中的this指向?qū)ο驣M。
$.ajax({
context:IM,
type:'get',
ulr:”page.html”,
success:IM.connect
})2、調(diào)用$.proxy
改變函數(shù)內(nèi)this的指向
$.get(”page.html”,$.proxy(IM.context,IM))
3、對象實傳
直接傳對象的正確引用而非this指針
這是最常見的做法,即在類實例化時用一個變量存儲對當前對象的引用,在后面的方法中直接使用此變量代替this的使用。注意:這種方法并沒有真正改變this的指向。
function classIm()
{
var self = this;
this.host = '192.168.1.28';
this.port = '8080';
this.connect = function(data)
{
socket.connect(self.host, self.port);
};
}4、使用apply加閉包
實現(xiàn)真正改變this的指向。
這種方法是很多JavaScript框架的做法。
Function.prototype.Proxy = function(thisObj)
{
var _method = this;
return function(data)
{
return _method.apply(thisObj,[data]);
//或者
return function()
{ret _fn.apply(thisObj,arguments);};
};
}
//調(diào)用:
var IM = new classIm();
$.get('CheckWebLogin.aspx', IM.connect.Proxy(IM));5、添加函數(shù)包裝器
在匿名回調(diào)函數(shù)中再調(diào)用實際的回調(diào)處理函數(shù)。不建議使用。
$.get('page.html', function(data){
IM.connect(data)
});二、jQuery事件綁定回調(diào)函數(shù)中的this
指向event.currentTarget,即附著這個函數(shù)的DOM對象。
1、可以在函數(shù)綁定時傳遞參數(shù):
$('#a').bind('click'{self:this},this.onClick);
function onClick(event){
var self=event.data.self;
}2、可以使用上面的2、3、4、5中方法改變this的指向。
$("#a").click($.proxy(myFun,this));
//或
$("#a").click(myFun.Proxy(this));到此這篇關于JQuery中this指向的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- jQuery AJAX回調(diào)函數(shù)this指向問題
- jQuery 選擇方法及$(this)用法實例分析
- 淺談jQuery this和$(this)的區(qū)別及獲取$(this)子元素對象的方法
- jQuery中$this和$(this)的區(qū)別介紹(一看就懂)
- 實例講解JQuery中this和$(this)區(qū)別
- 詳談jQuery中的this和$(this)
- 通過$(this)使用jQuery包裝后的方法或?qū)傩?/a>
- jquery $(this).attr $(this).val方法使用介紹
- jquery中this的使用說明
- JQuery this 和 $(this) 的區(qū)別
相關文章
jquery統(tǒng)計用戶選中的復選框的個數(shù)
使用選擇器得到所有被勾選的復選框元素的集合,然后通過判斷元素的個數(shù)來得到用戶勾選的個數(shù),需要的朋友可以參考下2014-06-06
用自定義圖片代替原生checkbox實現(xiàn)全選,刪除以及提交的方法
下面小編就為大家?guī)硪黄米远x圖片代替原生checkbox實現(xiàn)全選,刪除以及提交的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10

