在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>java源碼下載>

JAVA中關(guān)于this和that的一些知識(shí)

大小:0.3 MB 人氣: 2017-09-25 需要積分:1

  新手在入門 Java 的過程中,一定會(huì)踩很多關(guān)于 this 的坑,出現(xiàn)問題的本質(zhì)就是 this 指針的指向和自己想的不一樣。筆者在入門學(xué)習(xí)的過程中,也踩了很多坑,于是便寫下本篇文章記錄自己“踩坑”歷程。

  一。 this 在哪里?

  在上篇《從 Java 作用域說開去》分析中,我們知道,在 Execution Context 中有一個(gè)屬性是 this,這里的 this 就是我們所說的 this 。this 與上下文中可執(zhí)行代碼的類型有直接關(guān)系,this 的值在進(jìn)入執(zhí)行上下文時(shí)確定,并且在執(zhí)行上下文運(yùn)行期間永久不變。

  this 到底取何值?this 的取值是動(dòng)態(tài)的,是在函數(shù)真正被調(diào)用執(zhí)行的時(shí)候確定的,函數(shù)定義的時(shí)候確定不了。因?yàn)?this 的取值是執(zhí)行上下文環(huán)境的一部分,每次調(diào)用函數(shù),都會(huì)產(chǎn)生一個(gè)新的執(zhí)行上下文環(huán)境。

  所以 this 的作用就是用來(lái)指明執(zhí)行上下文是在哪個(gè)上下文中被觸發(fā)的對(duì)象。令人迷惑的地方就在這里,同一個(gè)函數(shù),當(dāng)在不同的上下文進(jìn)行調(diào)用的時(shí)候,this 的值就可能會(huì)不同。也就是說,this 的值就是函數(shù)調(diào)用表達(dá)式(也就是函數(shù)被調(diào)用的方式)的 caller。

  二。 this & that 具體指的是誰(shuí)?

  目前接觸的有以下14種情況,筆者打算一一列舉出來(lái),以后如果遇到了更多的情況,還會(huì)繼續(xù)增加。

  既然 this 是執(zhí)行上下文確定的,那么從執(zhí)行上下文的種類進(jìn)行分類,可以分為3種:

  

  那么接下來(lái)我們就從 Global Execution Context 全局執(zhí)行上下文,F(xiàn)unction Execution Context 函數(shù)執(zhí)行上下文,Eval Execution Context Eval執(zhí)行上下文 這三類,具體談?wù)?this 究竟指的是誰(shuí)。

  (一)。 全局執(zhí)行上下文1. 非嚴(yán)格模式下的函數(shù)調(diào)用

  這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此 this 就代表全局對(duì)象 Global。

  var name = ‘halfrost’;function test() { console.log(this); // window console.log(this.name); // halfrost}test();

  在全局上下文(Global Context)中,this 總是 global object,在瀏覽器中就是 window 對(duì)象。

  2. 嚴(yán)格模式下的函數(shù)調(diào)用

  嚴(yán)格模式由 ECMA 5.1引進(jìn),用來(lái)限制 Java 的一些異常處理,提供更好的安全性和更強(qiáng)壯的錯(cuò)誤檢查機(jī)制。使用嚴(yán)格模式,只需要將 ‘use strict’ 置于函數(shù)體的頂部。這樣就可以將上下文環(huán)境中的 this 轉(zhuǎn)為 undefined。這樣執(zhí)行上下文環(huán)境不再是全局對(duì)象,與非嚴(yán)格模式剛好相反。

  在嚴(yán)格模式下,情況并不是僅僅是 undefined 這么簡(jiǎn)單,有可能嚴(yán)格模式夾雜著非嚴(yán)格模式。

  先看嚴(yán)格模式的情況:

  ‘use strict’;function test() { console.log(this); //undefined};test();

  上面的這個(gè)情況比較好理解,還有一種情況也是嚴(yán)格模式下的:

  function execute() { ‘use strict’; // 開啟嚴(yán)格模式 function test() { // 內(nèi)部函數(shù)也是嚴(yán)格模式 console.log(this); // undefined } // 在嚴(yán)格模式下調(diào)用 test() // this 在 test() 下是 undefined test(); // undefined } execute();

  如果嚴(yán)格模式在外層,那么在執(zhí)行作用域內(nèi)部聲明的函數(shù),它會(huì)繼承嚴(yán)格模式。

  接下來(lái)就看看嚴(yán)格模式和非嚴(yán)格模式混合的情況。

  function nonStrict() { // 非嚴(yán)格模式 console.log(this); // window } function strict() { ‘use strict’; // 嚴(yán)格模式 console.log(this); // undefined }

  這種情況就比較簡(jiǎn)單了,各個(gè)模式下分別判斷就可以了。

  (二)。函數(shù)執(zhí)行上下文3. 函數(shù)調(diào)用

  當(dāng)通過正常的方式調(diào)用一個(gè)函數(shù)的時(shí)候,this 的值就會(huì)被設(shè)置為 global object(瀏覽器中的 window 對(duì)象)。

  嚴(yán)格模式和非嚴(yán)格模式的情況和上述全局執(zhí)行上下文的情況一致,嚴(yán)格模式對(duì)應(yīng)的 undefined ,非嚴(yán)格模式對(duì)應(yīng)的 window 這里就不再贅述了。

  4. 方法作為對(duì)象的屬性被調(diào)用

  var person = { name: “halfrost”, func: function () { console.log(this + “:” + this.name); }};person.func(); // halfrost

  在這個(gè)例子里面的 this 調(diào)用的是函數(shù)的調(diào)用者 person,所以會(huì)輸出 person.name 。

  當(dāng)然如果函數(shù)的調(diào)用者是一個(gè)全局對(duì)象的話,那么這里的 this 指向又會(huì)發(fā)生變化。

  var name = “YDZ”;var person = { name: “halfrost”, func: function () { console.log(this + “:” + this.name); }};temp = person.func;temp(); // YDZ

  在上面這個(gè)例子里面,由于函數(shù)被賦值到了另一個(gè)變量中,并沒有作為 person 的一個(gè)屬性被調(diào)用,那么 this 的值就是 window。

  上述現(xiàn)象其實(shí)可以描述為,“從一個(gè)類中提取方式時(shí)丟失了 this 對(duì)象”。針對(duì)這個(gè)現(xiàn)象可以再舉一個(gè)例子:

  var counter = { count: 0, inc: function() { this.count ++; }}var func = counter.inc;func();counter.count; // 輸出0,會(huì)發(fā)現(xiàn)func函數(shù)根本不起作用

  這里我們雖然把 counter.inc 函數(shù)提取出來(lái)了,但是函數(shù)里面的 this 變成了全局對(duì)象了,所以 func() 函數(shù)執(zhí)行的結(jié)果是 window.count++。然而 window.count 根本不存在,且值是 undefined,對(duì) undefined 操作,得到的結(jié)果只能是 NaN。

非常好我支持^.^

(5) 83.3%

不好我反對(duì)

(1) 16.7%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 色拍拍综合网 | 五月天狠狠 | 网红和老师啪啪对白清晰 | 天天做天天做天天综合网 | 欧美精品成人a多人在线观看 | 天天视频国产免费入口 | 久久98精品久久久久久婷婷 | 中文字幕一区二区在线观看 | 成人国产三级在线播放 | 国产成人无精品久久久久国语 | 狂捣猛撞侍卫攻双性王爷受 | 国产免费久久精品 | 美女被免费视频的网站 | 天天天色综合 | 夜夜做夜夜爽 | 日本高清视频一区 | ww7788色淫网站女女免费 | 免费爱爱视频网站 | 国产精品成人aaaaa网站 | 午夜伦理片在线观看 | 亚洲成人综合网站 | 色网站免费在线观看 | 二级黄色大片 | 欧美高清另类 | 优优优色 | 一级一片一a一片 | 男人的午夜天堂 | 亚洲香蕉久久一区二区三区四区 | 日韩精品系列产品 | 在线视频免费观看 | 日本a级片在线观看 | www深夜视频在线观看高清 | 一级毛片免费不卡直观看 | 国产永久免费爽视频在线 | 九九热在线视频观看这里只有精品 | 国产亚洲视频在线播放大全 | а8天堂资源在线官网 | 在线a亚洲老鸭窝天堂新地址 | 欧美18videosex性欧美1819 | 特级做a爰片毛片免费看 | 亚洲国产一区二区三区在线观看 |