<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      深入理解javascript原型和閉包(10)——this

      接著上一節講的話,應該輪到“執行上下文棧”了,但是這里不得不插入一節,把this說一下。因為this很重要,js的面試題如果不出幾個與this有關的,那出題者都不合格。

       

      其實,this的取值,分四種情況。我們來挨個看一下。

      在此再強調一遍一個非常重要的知識點:在函數中this到底取何值,是在函數真正被調用執行的時候確定的,函數定義的時候確定不了。因為this的取值是執行上下文環境的一部分,每次調用函數,都會產生一個新的執行上下文環境。

       

      情況1:構造函數

      所謂構造函數就是用來new對象的函數。其實嚴格來說,所有的函數都可以new一個對象,但是有些函數的定義是為了new一個對象,而有些函數則不是。另外注意,構造函數的函數名第一個字母大寫(規則約定)。例如:Object、Array、Function等。

      以上代碼中,如果函數作為構造函數用,那么其中的this就代表它即將new出來的對象。

       

      注意,以上僅限new Foo()的情況,即Foo函數作為構造函數的情況。如果直接調用Foo函數,而不是new Foo(),情況就大不一樣了。

      這種情況下this是window,我們后文中會說到。

       

      情況2:函數作為對象的一個屬性

      如果函數作為對象的一個屬性時,并且作為對象的一個屬性被調用時,函數中的this指向該對象。

      以上代碼中,fn不僅作為一個對象的一個屬性,而且的確是作為對象的一個屬性被調用。結果this就是obj對象。

       

      注意,如果fn函數不作為obj的一個屬性被調用,會是什么結果呢?

      如上代碼,如果fn函數被賦值到了另一個變量中,并沒有作為obj的一個屬性被調用,那么this的值就是window,this.x為undefined。

       

      情況3:函數用call或者apply調用

      當一個函數被call和apply調用時,this的值就取傳入的對象的值。至于call和apply如何使用,不會的朋友可以去查查其他資料,本系列教程不做講解。

       

      情況4:全局 & 調用普通函數

      在全局環境下,this永遠是window,這個應該沒有非議。

       

      普通函數在調用時,其中的this也都是window。

      以上代碼很好理解。

      不過下面的情況你需要注意一下

      函數f雖然是在obj.fn內部定義的,但是它仍然是一個普通的函數,this仍然指向window。

       

      完了。

      看到了吧,this有關的知識點還是挺多的,不僅多而且非常重要。

      最后,既然提到了this,有必要把一個非常經典的案例介紹給大家,又是jQuery源碼的。

      以上代碼是從jQuery中摘除來的部分代碼。jQuery.extend和jQuery.fn.extend都指向了同一個函數,但是當執行時,函數中的this是不一樣的。

      執行jQuery.extend(…)時,this指向jQuery;執行jQuery.fn.extend(…)時,this指向jQuery.fn。

      這樣就巧妙的將一段代碼同時共享給兩個功能使用,更加符合設計原則。

       

      好了,聊完了this。接著上一節繼續說“執行上下文棧”。

      注意:還有一部分this的內容本文中沒有講到,已經補充到這里:http://www.rzrgm.cn/wangfupeng1988/p/3996037.html

      ---------------------------------------------------------------------------

      本文已更新到《深入理解javascript原型和閉包系列》的目錄,更多內容可參見《深入理解javascript原型和閉包系列》。

      另外,歡迎關注我的微博

      學習作者教程:《前端JS高級面試》《前端JS基礎面試題》《React.js模擬大眾點評webapp》《zepto設計與源碼分析》《json2.js源碼解讀

      posted @ 2014-09-23 14:57  王福朋  閱讀(65744)  評論(48)    收藏  舉報
      主站蜘蛛池模板: 宅男噜噜噜66在线观看| 国产亚洲一二三区精品| 亚洲欧美中文字幕日韩一区二区| 格尔木市| 国产一区二区不卡91| 国产一区二区三区我不卡| 亚洲国产精品综合久久2007| 成人福利国产午夜AV免费不卡在线| 欧美日韩精品一区二区视频| 欧美乱大交aaaa片if| 日本亚洲欧洲免费无线码| 91精品国产自产91精品| 无码欧亚熟妇人妻AV在线外遇 | 亚洲精品岛国片在线观看| 97在线精品视频免费| 国产一区二区三区禁18| 日韩精品一区二区三区激情视频| 国产一区二区三区不卡视频| 人妻蜜臀久久av不卡| 亚欧乱色国产精品免费九库| 精品无码人妻一区二区三区| 最新精品国偷自产在线美女足| 日韩精品卡一卡二卡三卡四 | 亚洲欧美成人aⅴ在线| 一区二区三区鲁丝不卡| 成av人片一区二区久久| 十八禁午夜福利免费网站| 亚洲国产欧美在线人成AAAA| 丁香五月婷激情综合第九色| 国产日韩精品免费二三氏| 国产裸体美女视频全黄| 动漫AV纯肉无码AV电影网| 亚洲av色香蕉一区二区三| 精品人妻无码一区二区三区性| 人人妻人人澡人人爽人人精品av| 美女内射福利大全在线看| 久久三级国内外久久三级| 中文字幕有码高清日韩| 久久久久亚洲av成人网址| 激情综合五月| 国产高清自产拍av在线|