javascript 高級--this的邏輯

我們來談談this的理解。

上一章,我們講到arguments的類數組的對象,有兩個屬性。一個是callee和另一個是this的屬性。我們常用的是this屬性。所以,我們了解到this的屬性是屬于arguments對象的屬性。這兩個屬性都是指針。

this引用的是函數執行的環境對象。或者也可以說是this值。this是一個指針,指向調用執行的函數環境對象,也就是,誰調用this所在的當前函數時,this就指向這個對象。由于在調用函數之前,this的值并不確定。由于this引用的函數執行環境對象,所以,this的值是函數的執行對象。所以,我們要掌握好this的要點,要做到以下幾點:

第一:this只能存在于函數體當中,必須要有函數執行對象的環境。

第二:要分清this所在的函數,這個就是函數執行的對象,(this的指針作用就是當莫個對象調用函數執行的時指向他,而this在當前所在的函數體的所點屬性和方法就會用添加到這個對象,由這個對象來調用)。

第三:在創建對象時,我們經常用構造函數來創建對象。我們將創建的對象的屬性和方法都掛載在this指針上,將來this指向誰,就把掛載的屬性和方法添加在誰身上。在調用構造函數時,我們用new 關鍵字+構造函數名 為什么用new呢?因為new首先在內存中來在堆區開辟空間,然后構造函數this指針指向的這塊空間,掛載在this的屬性和方法就添加到這塊空間了,最后儲存的空間的地址保存在構造函數的實例了。(也可以這說,this指針所掛載的屬性和方法是添加到調用this指針所在當前函數的對象里。) 當在構造函數時添加return +引用類型的對象時,會覆蓋構造函數所創建的對象,即是new開辟的空間。除null之外。但當對象的方法交給新的變量時,再用新變量加小括號的形式去調用的話,this的指針就指向了window了。

第四:當網頁加載時,全局作用域中調用函數時,this指針指向的是window 對象。在調用this所在的當前函數之前,this的值并不確定,可能會在代碼執行當中引用不同的對象。主要是看誰來調用this所在的函數執行環境的對象。

第五:在事件的處理函數中,如果有this指針,是事件調用的觸發的,就指向綁定事件的標簽。但是,復雜的話,就是事件里面嵌套函數的情況。我們知道this的指針是指向調用this所在當前函數的對象。專業的講的話,是引用函數執行環境的對象。所以,我們要知道兩點:

1:this指針是指向的對象,它是作為引用函數執行環境對象的。(這也是我們經常看到是this點的是函數(方法)或者是屬性。)

2:定義this的環境可以是任意的環境和作用域,但是我們看的是誰調用執行this指針來執行,this就指向誰。

第六:在定時器中,由定時器調用并觸發的this指針的話,this指針就指向是window 。因為是定時器(setInterval setTimeout)是在第二個參數 時間 由window來驅動定時器執行,this 在執行語句中 就是指向的是window ?還有一種情況是定時器的參數,因為定時器的參數是一個函數,所以可以用this點方法來寫進參數,所以this的作用是指向傳參的對象,看傳參的環境,來辨別this的指向的對象。在全局的作用域的是window的傳參,在局部的作用域下是當前對象的傳參。

第七:在事件函數中,嵌套了函數,該函數又出現了this指針,那么this指針指向的是window。因為在嵌套的函數是在window驅動的。當我們要改變其this指針的指向時,我們可以通過用cell()和apply()來代替window來指向。就可以來改變其this指針的指向,來改變其操作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 沒搞錯吧!js寫了那么多年,this還是會搞錯!沒搞錯,javascript就是回搞錯! ………… 在寫java的...
    zhoulujun閱讀 1,458評論 0 11
  • 他說,從海螺里能聽見大海的聲音。 【1】 江淼把一網魚丟上岸給老爹,站在船上把白色工字背心脫下,當毛巾一樣擰出一把...
    嗶剝嗶剝閱讀 678評論 24 9
  • 已經跑步一周了,沒想到以我的體能能堅持下來,以前連想都不敢想事情我居然做到了,昨天晚上更是連續跑下了4公里,雖然用...
    芳華灼灼閱讀 201評論 0 0
  • 我的早晨是從中午開始的。 絕大多數的時候,我寧愿在夜里睜著干澀的眼睛,默默地待著,如同一根點亮的蠟燭只是虛耗著夜無...
    月的漁女閱讀 423評論 2 7