<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
JavaScript中的this不總是指向當前物件,函數或類中的this指向與呼叫這個函數的物件以及上下文環境是息息相關的。
如在全域性作用域呼叫一個含this的物件,此時當前物件的this指向的是window。
為了讓this的指向符合自己的意願,JavaScript提供了兩個方法用以改變this的指向,它們是call和apply,當然也有利用閉包來實現的方法。
在Jquery 中的this的指向是怎麼樣的呢?
預設情況下指向AJAX設定物件ajaxSettings。
在jQuery內部是用s.success代替傳入的回撥函數去執行的,而success的呼叫物件就是s,即ajaxSettings物件的縮寫。
var socket = { connect: function(host, port) { alert('Connecting socket server,host:' + host + ',port:' + port); } }; //一個即時通訊類,其中connect方法還將作為AJAX回撥函數被呼叫 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回撥函數程式碼socket.connect(this.host, this.port)中的this指向類classIm的範例物件IM,或者說是想socket.connect()方法能得到正確的引數值,大致有下面幾種方法:
將Ajax回撥函數中的this指向物件IM。
$.ajax({ context:IM, type:'get', ulr:」page.html」, success:IM.connect })
改變函數內this的指向
$.get(」page.html」,$.proxy(IM.context,IM))
直接傳物件的正確參照而非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); }; }
實現真正改變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);}; }; } //呼叫: var IM = new classIm(); $.get('CheckWebLogin.aspx', IM.connect.Proxy(IM));
在匿名回撥函數中再呼叫實際的回撥處理常式。不建議使用。
$.get('page.html', function(data){ IM.connect(data) });
指向event.currentTarget,即附著這個函數的DOM物件。
$('#a').bind('click'{self:this},this.onClick); function onClick(event){ var self=event.data.self; }
$("#a").click($.proxy(myFun,this)); //或 $("#a").click(myFun.Proxy(this));
到此這篇關於JQuery中this指向的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45