<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                接著上一節講的話,應該輪到“執行上下文棧”了,但是這里不得不插入一節,把this說一下。因為this很重要,js的面試題如果不出幾個與this有關的,那出題者都不合格。 其實,this的取值,分四種情況。我們來挨個看一下。 在此再強調一遍一個非常重要的知識點:在函數中this到底取何值,是在函數真正被調用執行的時候確定的,函數定義的時候確定不了。因為this的取值是執行上下文環境的一部分,每次調用函數,都會產生一個新的執行上下文環境。 **情況1****:構造函數** 所謂構造函數就是用來new對象的函數。其實嚴格來說,所有的函數都可以new一個對象,但是有些函數的定義是為了new一個對象,而有些函數則不是。另外注意,構造函數的函數名第一個字母大寫(規則約定)。例如:Object、Array、Function等。 ![](https://box.kancloud.cn/2015-09-21_55ff9a406c9f4.png) 以上代碼中,如果函數作為構造函數用,那么其中的this就代表它即將new出來的對象。 注意,以上僅限new Foo()的情況,即Foo函數作為構造函數的情況。如果直接調用Foo函數,而不是new Foo(),情況就大不一樣了。 ![](https://box.kancloud.cn/2015-09-21_55ff9a460bc46.png) 這種情況下this是window,我們后文中會說到。 **情況2****:函數作為對象的一個屬性** 如果函數作為對象的一個屬性時,并且作為對象的一個屬性被調用時,函數中的this指向該對象。 ![](https://box.kancloud.cn/2015-09-21_55ff9a462085e.png) 以上代碼中,fn不僅作為一個對象的一個屬性,而且的確是作為對象的一個屬性被調用。結果this就是obj對象。 注意,如果fn函數不作為obj的一個屬性被調用,會是什么結果呢? ![](https://box.kancloud.cn/2015-09-21_55ff9a462fbb7.png) 如上代碼,如果fn函數被賦值到了另一個變量中,并沒有作為obj的一個屬性被調用,那么this的值就是window,this.x為undefined。 **情況3****:函數用call****或者apply****調用** 當一個函數被call和apply調用時,this的值就取傳入的對象的值。至于call和apply如何使用,不會的朋友可以去查查其他資料,本系列教程不做講解。 ![](https://box.kancloud.cn/2015-09-21_55ff9a4649de4.png) **情況4****:全局 &** **調用普通函數** 在全局環境下,this永遠是window,這個應該沒有非議。 ![](https://box.kancloud.cn/2015-09-21_55ff9a4b603f0.png) 普通函數在調用時,其中的this也都是window。 ![](https://box.kancloud.cn/2015-09-21_55ff9a4b6fcef.png) 以上代碼很好理解。 不過下面的情況你需要注意一下: ![](https://box.kancloud.cn/2015-09-21_55ff9a4b84ea6.png) 函數f雖然是在obj.fn內部定義的,但是它仍然是一個普通的函數,this仍然指向window。 完了。 看到了吧,this有關的知識點還是挺多的,不僅多而且非常重要。 最后,既然提到了this,有必要把一個非常經典的案例介紹給大家,又是jQuery源碼的。 ![](https://box.kancloud.cn/2015-09-21_55ff9a4b99c1a.png) 以上代碼是從jQuery中摘除來的部分代碼。jQuery.extend和jQuery.fn.extend都指向了同一個函數,但是當執行時,函數中的this是不一樣的。 執行jQuery.extend(…)時,this指向jQuery;執行jQuery.fn.extend(…)時,this指向jQuery.fn。 這樣就巧妙的將一段代碼同時共享給兩個功能使用,更加符合設計原則。 好了,聊完了this。接著上一節繼續說“執行上下文棧”。 注意:還有一部分this的內容本文中沒有講到,已經補充到這里:http://www.cnblogs.com/wangfupeng1988/p/3996037.html
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看