js中的this介紹

2022-05-03 22:21:20 字數 2766 閱讀 1401

在js中我們用物件導向的思想去編寫的時候,各個模組之間的變數就不那麼容易獲取的到了,當然也可以通過閉包的方式拿到其他函式的變數,如果說每獲取乙個變數,都要用閉包的方式去獲取,就顯得太繁瑣了,這時候js中也提供了一種方法來獲取其他的變數,當然前提是這些函式之間是有聯絡的,比如函式2是綁在函式1的原型上的,那麼函式1中用this指明的乙個變數,在函式2中同樣可以用this來獲取到,當然著其中是有著一定的規則的。那麼接下來我給大家對this做乙個詳細的介紹

概念:執行上下文,this一般存在於函式中,表示當前函式的執行上下文, 如果函式沒有執行,那麼this沒有內容,只有函式在執行後this才有繫結。

注意:this的指向只能是物件,當然別忘記了陣列也是乙個特殊的物件。

this的指向其實是跟this的執行位置是有關的,不同的位置執行位置,this的指向就可能發生改變。

tip:this被誰執行了,this就是執行誰的,這時候一定要看清楚this是被誰直接執行的!

那麼接下來給大家總結幾種this指向的問題。

eg:

function fn()

fn();

這個時候在嚴格模式下,指向的是undefined,去掉嚴格模式,指向window

tip:隱式執行粗體上分為五種,在隱式執行的過程中,可能會改變執行物件,也可能會出現隱式丟失,從而改變了當前的this

這裡給大家整理五種常見的this錯誤指向的例子

eg:

var obj =

}var newshow =obj.show;

newshow();

//this指向了window,函式的執行物件變成了window

eg:    

var name='

window';

var obj =

}function trigger(fn)

trigger(obj.show);

//this指向window

var name='

window';

var obj =

}settimeout(obj.show,

1000

);

//this指向了window

2.4:dom物件事件

var name = '

window';

var ohtml =document.documentelement;

var obj =

}ohtml.name = '

dom'

; ohtml.onclick =obj.show;

//this指向了window

2.5:arguments類陣列改變this指向問題

tip:傳入過多的實參,多餘的實參雖然沒有什麼用,但也是儲存在函式中了
var length = 10;

function fn()

var obj =

};obj.method(fn,"111","222");

//列印結果為10,3

tip1:

obj.method的value並不是乙個可以直接直接執行的函式,通過obj.method並不能執行函式,

所以this指向的並不是obj,輸出的不是5,this指向的是function這個無名函式,他的執行物件直接是window,發生隱式丟失

但是arguments[0]();也會執行,因為傳入的第乙個引數就是乙個函式,同時傳進了兩個多餘的實參,所以列印出的為3

tip2:

陣列是很特殊的物件,他的索引值相當於是obj2物件中的屬性值。所以說陣列,類陣列也會改變this指向問題。

tip:當發生隱式執行的時候,還希望能拿到指定的this,可以通過函式的一些方法,強行改變到指定的this

這裡拿bind方法給大家做一下介紹

blind()方法;執行結束後,會返回乙個新函式,新函式是被改變了this和引數的老函式

bind()方法會建立乙個新函式,稱為繫結函式,當呼叫這個繫結函式時,繫結函式會以建立它時傳入bind()方法的第乙個引數作為this,

傳入 bind() 方法的第二個以及以後的引數加上繫結函式執行時本身的引數按照順序作為原函式的引數來呼叫原函式。

tip:改變this的指向,簡單來說,可以讓沒有這個功能的物件,具有另乙個物件的功能

當blind();有多個引數的時候,第乙個引數表示this的指向,其他的引數會與原函式的引數一起放在新函式中

eg1:

var a =

var b =

}b.show();

var c =b.show.bind(a);

c();

//此時的c能夠獲取到a裡面的name,利用a強行將this指向了a

eg2:

常用方式,用來改變函式內計時器函式this的指向

for(var i=0;i).bind(

this),500

) }

}//不用blind()方法,this直接指向的是window,強行給計時器函式加了blind()方法,這時候誰觸發了函式的執行,this就指向了誰。

利用物件導向思想程式設計的時候,我們通過new建立這個函式物件的時候,那麼這個this就指向了被new出來的物件,也就是所謂的new繫結

js中的Object介紹

object 建構函式,例項不指向建構函式,所以不能呼叫建構函式中的方法,建構函式中也有方法,這些方法就是提供一些工具。靜態方法,類方法 object.assign obj 將obj屬性拷貝到第乙個引數物件中,並且返回 object.keys obj 獲取obj物件中所有屬性 object.defi...

JS中關於物件的介紹

介紹 物件是多個屬性的集合,使用鍵值對進行儲存 兩種方式 字面量和建構函式 字面量var obj 建構函式 var obj newobject 兩種方式 點訪問符和中括號訪問符 點訪問符 訪問 var name obj.name 寫入 obj.name terry 中括號訪問符,可以適用於變數 va...

JS中open 函式介紹

window object.open url name features replace url 新視窗的url位址 name 新視窗的名稱,可以為空 featurse 屬性控制字串,在此控制視窗的各種屬性,屬性之間以逗號隔開。fullscreen 是否全屏,預設no channelmode 是否顯...