JavaScript中this指向詳解

2021-08-28 13:56:11 字數 901 閱讀 2014

this到底是什麼?

this實際上是在函式呼叫時發生的繫結,它指向什麼完全取決於函式在**被呼叫(起決於函式的呼叫位置)

當乙個函式被呼叫時,會建立乙個活動記錄(有時候也稱為執行上下文)。這個記錄會包含函式在**被呼叫(呼叫棧)、函式的呼叫方式、傳入的引數等資訊。this就是這個記錄的乙個屬性,會在函式執行的過程中用到。

this的確定:

情況1,如果乙個函式中有 this,但是它沒有被上一級的物件所呼叫,那麼this的指向就是window,這裡需要說明的是在js嚴格版本中this的指向不是window

情況2,如果乙個函式中有this,這個函式有被上一級的物件所呼叫,那麼this指向的就是上一級的物件

情況3,如果乙個函式中有this,這個函式中包含多個物件,儘管這個函式是被最外層的物件呼叫,this指向的也只是它上一級的物件

call()第二個引數為元素,如果第乙個引數寫的是null,那麼this的指向是window物件

bind(),該方法返回的是乙個修改過後的函式,bind也可以有多個引數,並且引數可以執行的時候再次新增,但是要注意的是,引數是按照形參的順序進行的

new操作符會改變函式this的指向問題

使用new來呼叫函式,或者說發生構造函式呼叫時,會自動執行下面操作:

(1) 建立(或者說構造)乙個全新的物件

(2)這個新物件會被執行[prototype]連線

(3)這個新物件會繫結到函式呼叫的this

(4)如果函式沒有返回其它物件,那麼new表示式中的函式會自動返回這個新物件

1. 由new呼叫?繫結到新建立的物件

3. 由上下文呼叫?繫結到那個上下文物件

4. 預設:在嚴格模式下繫結到undefined,否則繫結到全域性物件

JavaScript中prototype的理解

prototype使我們能夠向物件新增屬性或者方法。語法 object.prototype.name value 2.基於原型的繼承 obj2 和obj3都是函式foo的例項,可以看到每個例項不僅有自己自身的屬性,還具有原型鏈上的x 也就是foo.prototype 3.prototype與原型 通...

javascript中處理時間

var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...

javascript中處理時間

var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...