當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 領(lǐng)域應(yīng)用 > 微信營(yíng)銷 > 微信營(yíng)銷軟件
JS中的this關(guān)鍵字解剖
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
在開(kāi)發(fā)的各類語(yǔ)言中都會(huì)有 this 關(guān)鍵字,this 看起來(lái)很簡(jiǎn)單,但是在不同的地方代表的意義就不一樣了,很
容易混淆。做過(guò)Java的同道中人都會(huì)遇到一個(gè)這樣的問(wèn)題,在一個(gè)類中的this,在類的方法中代表的是該類的實(shí)例對(duì)
象,但是遇到匿名內(nèi)部類就麻煩了,此時(shí)的this代表的是所屬類的實(shí)例對(duì)象。在JavaScript中this變量是一個(gè)令人難
以摸清的關(guān)鍵字,this可謂是非常強(qiáng)大,充分了解this的相關(guān)知識(shí)有助于我們?cè)诰帉懨嫦驅(qū)ο蟮腏avaScript程序時(shí)能
夠游刃有余,那就更難理解了,因?yàn)槲覀€(gè)人感覺(jué)JS比Java語(yǔ)言要難,JS 是一種弱的腳本語(yǔ)言,在一個(gè)function的作
用范圍就不一樣了,下面就我對(duì)JS腳本語(yǔ)言中的this關(guān)鍵字的理解,闡述一下自己的理解看法:
1、一般用處:
對(duì)于this變量最要的是能夠理清this所引用的對(duì)象到底是哪一個(gè),也許很多資料上都有自己的解釋,但有些概
念講的偏繁雜。而我的理解是:首先分析this所在的函數(shù)是當(dāng)做哪個(gè)對(duì)象的方法調(diào)用的,則該對(duì)象就是this所引用的
對(duì)象。
eg1:
var obj = {}; obj.x = 100; obj.y = function() { alert( this.x ); }; obj.y(); //彈出 100
解析:這段代碼非常容易理解,當(dāng)執(zhí)行 obj.y() 時(shí),函數(shù)是作為對(duì)象obj的方法調(diào)用的,因此函數(shù)體內(nèi)的this
指向的是obj對(duì)象,所以會(huì)彈出100。
eg2:
var checkThis = function() { alert( this.x); }; var x = 'this is a property of window'; var obj = {}; obj.x = 100; obj.y = function(){ alert( this.x ); }; var obj2 = obj.y; obj.y(); //彈出 100 checkThis(); //彈出 'this is a property of window obj2(); //彈出 'this is a property of window
解析:這里為什么會(huì)彈出 'this is a property of window',可能有些讓人迷惑。在JavaScript的變量作用域
里有一條規(guī)則“全局變量都是window對(duì)象的屬性”。當(dāng)執(zhí)行 checkThis() 時(shí)相當(dāng)于 window.checkThis(),因此,此
時(shí)checkThis函數(shù)體內(nèi)的this關(guān)鍵字的指向變成了window對(duì)象,而又因?yàn)閣indow對(duì)象又一個(gè)x屬性( 'this is a
property of window'),所以會(huì)彈出 'this is a property of window'。
上面的兩個(gè)示例都是比較容易理解的,因?yàn)橹灰袛喑霎?dāng)前函數(shù)是作為哪個(gè)對(duì)象的方法調(diào)用(被哪個(gè)對(duì)象調(diào)用)
的,就可以很容易的判斷出當(dāng)前this變量的指向。
2、this.x 與 apply()、call()
通過(guò)call和apply可以重新定義函數(shù)的執(zhí)行環(huán)境,即this的指向,這對(duì)于一些應(yīng)用當(dāng)中是十分常用的。
eg3:---> call()
function changeStyle( type , value ){ this.style[ type ] = value; } var one = document.getElementById( 'one' ); changeStyle.call( one , 'fontSize' , '100px' ); changeStyle('fontSize' , '300px'); //出現(xiàn)錯(cuò)誤,因?yàn)榇藭r(shí)changeStyle中this引用的是window對(duì)象,而window并無(wú)style屬性。
解析:注意changeStyle.call() 中有三個(gè)參數(shù),第一個(gè)參數(shù)用于指定該函數(shù)將被哪個(gè)對(duì)象所調(diào)用。這里指定了
one,也就意味著,changeStyle函數(shù)將被one調(diào)用,因此函數(shù)體內(nèi)this指向是one對(duì)象。而第二個(gè)和第三個(gè)參數(shù)對(duì)
應(yīng)的是changeStyle函數(shù)里的type和value兩個(gè)形參。最總我們看到的效果是Dom元素one的字體變成了20px。
eg4:---> apply()
function changeStyle( type , value ){ this.style[ type ] = value; } var one = document.getElementById( 'one' ); changeStyle.apply( one , ['fontSize' , '100px' ]); changeStyle('fontSize' , '300px'); //出現(xiàn)錯(cuò)誤,原因同示例三
解析:apply的用法和call大致相同,只有一點(diǎn)區(qū)別,apply只接受兩個(gè)參數(shù),第一個(gè)參數(shù)和call相同,第二個(gè)參
數(shù)必須是一個(gè)數(shù)組,數(shù)組中的元素對(duì)應(yīng)的就是函數(shù)的形參。
3、無(wú)意義(詭異)的this用處
eg5:
var obj = { x : 100, y : function(){ setTimeout( function(){ alert(this.x); } //這里的this指向的是window對(duì)象,并不是我們期待的obj,所以會(huì)彈出undefined , 2000); } }; obj.y();
如何達(dá)到預(yù)期的效果?
eg6:
var obj = { x : 100, y : function(){ var that = this; setTimeout( function(){ alert(that.x); } , 2000); } }; obj.y(); //彈出100
4、事件監(jiān)聽(tīng)函數(shù)中的this
var one = document.getElementById( 'one' ); one.onclick = function(){ alert( this.innerHTML ); //this指向的是one元素,這點(diǎn)十分簡(jiǎn)單.
};
總結(jié):
綜上所述,在JS中語(yǔ)言中,關(guān)鍵字 this在不同的地方,代表的作用意義就不一樣,
this --->所指的就是直至包含this指針的上層對(duì)象;
調(diào)用形式this指向 普通函數(shù) 全局對(duì)象window 對(duì)象的方法 該對(duì)象 構(gòu)造函數(shù) 新構(gòu)造的對(duì)象
- 1微信營(yíng)銷技巧:你的微營(yíng)銷為何失?。?/a>
- 2分享一些微信公眾號(hào)運(yùn)營(yíng)和推廣的經(jīng)驗(yàn)
- 3微信將推出信息流廣告 一個(gè)有待挖掘的大金礦
- 4如何刪除不用的MSN賬號(hào)
- 5京東云平臺(tái)否認(rèn)關(guān)閉傳聞 稱升級(jí)替代原有業(yè)務(wù)
- 6微信推廣軟件與酬酢記者不同的模塊有哪一些?
- 72015微商崛起,打造品牌微商最好的一面
- 8微信怎么用:怎樣使用微信?
- 9四種食物空腹吃不利于健康
- 10“80后”微信擺“炮攤”
- 11是誰(shuí)鐘愛(ài)著互聯(lián)網(wǎng)時(shí)代的微產(chǎn)物——微信?
- 12微信營(yíng)銷- 賬號(hào)消息推送的黃金時(shí)段?
- 13微信導(dǎo)航:《諾亞傳說(shuō)》關(guān)注有禮,游戲周邊輕松拿
- 14免費(fèi)微信營(yíng)銷軟件與交際時(shí)代報(bào)各不同的能力和功能有哪些?
- 15微信的使用:怎樣添加微信私號(hào)?
- 16做微信營(yíng)銷,80%的人都會(huì)犯這樣的錯(cuò)誤
- 17騰訊與香港運(yùn)營(yíng)商合作推微信8元包月套餐 不限流
- 18微信公共平臺(tái)導(dǎo)航:我國(guó)持續(xù)打擊淫穢網(wǎng)站 微信微博成監(jiān)管重點(diǎn)
- 19微信二維碼新聞:陳奕迅元宵節(jié)開(kāi)通官方微信 曬趣圖與微友玩猜謎
- 20淘寶監(jiān)控系統(tǒng)全解!
- 21免費(fèi)微信營(yíng)銷軟件與應(yīng)酬CNN皆不同的功能有哪些?
- 22聚美優(yōu)品三周年慶:流量拖垮服務(wù)器
- 23微信營(yíng)銷軟件與交際記者各不同的功能有哪幾種?
- 24做網(wǎng)絡(luò)營(yíng)銷必須具備的6個(gè)能力
- 25網(wǎng)站訪問(wèn)量的價(jià)值
- 26發(fā)10條短信的錢,可以發(fā)1000條微信!
- 27微信資訊:微信必將成為企業(yè)CRM利器 市場(chǎng)規(guī)模或可達(dá)70億
- 28微信公眾賬號(hào)導(dǎo)航:微信曬富曬別墅,遭窮網(wǎng)友敲詐二百萬(wàn)
- 29海星燈光控制器接線示意圖
- 30微信電商出王牌,開(kāi)放微信紅包
成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓