首頁  >  文章  >  web前端  >  在JavaScript函數中this指向的是什麼

在JavaScript函數中this指向的是什麼

清浅
清浅原創
2018-11-27 10:46:432449瀏覽

今天將和大家分享JavaScript中一個重要知識點this,有一定的參考價值,希望對大家學習有所幫助。

對於this關鍵字的學習經常讓我們感到困惑,搞不清楚它在函數中指代的是什麼以及如何去使用它,今天將在文章中為大家詳細介紹有關this的知識

【推薦課程:JavaScript教學

上下文與this關鍵字

在JavaScript中,函數有自己的執行上下文,在這裡要特別注意下函數的執行上下文不是關於它是如何聲明的,也不是說函數的作用,而是關於如何在程式碼中呼叫它,我們在呼叫此執行上下文時就會使用this。當this從函數內部存取時,實際上就是存取其執行上下文。

呼叫函數方式與this

上下文取決於函數的呼叫方式,我們可以透過4種不同的方式來呼叫上下文的函數,因此this也有四種不同的指向

1. 一個基本的函數呼叫

2. 使用上下文物件呼叫函數,也稱為隱含綁定。

3. 使用call()或呼叫函數apply(),也稱為明確綁定。

4. 透過bind()方法綁定

基本函數呼叫

基本函數呼叫是呼叫函數最簡單的方法

例:

<script type="text/javascript">
	var name="张三";
	function student(){
		console.log(this.name);
	}
	student();
</script>

Image 1.jpg

在這個例子中可以看出student()是從全域範圍內呼叫函數,因此這裡的this指涉的是全域範圍,所以輸出結果為「」張三「」

隱式綁定

#當函數被一個物件「包含」的時候,我們稱函數的this被隱式綁定到這個物件裡面了

<script type="text/javascript">
var student={
	name:"张三",
	obj:function(){
		console.log(this.name)
	}
}
student.obj();
	</script>

Image 2.jpg

obj函數雖然被放到物件裡去但是並不會因為它被定義在物件的內部就會與外部產生區別,在隱式綁定下,obj透過this還是可以存取到student物件中的a屬性

#顯示綁定

可以使用call()或apply( )方法呼叫函數,其執行上下文明確綁定到對象,call和apply可以改變this指向

#例:未使用call ()或apply()時

<script type="text/javascript">
var name="张三";
var obj = {
	name:"李四",
	fun:function(){
	console.log(this.name);}}
obj.fun();
</script>

Image 3.jpg

Image 1.jpg



Image 4.jpg

#利用call()讓this指向window

<script type="text/javascript">
var name="张三";
var obj = {
name:"李四",
fun:function(){
      onsole.log(this.name);}}
       obj.fun.call(window);
</script>



#bind()綁定### ######bind()會建立一個函數,函數體內的this物件的值會被綁定到傳入bind()第一個參數的值,但bind不執行函數,只回傳一個可供執行的函數 ###
<script type="text/javascript">
var a = {
	b : function(){
		var func = function(){
			console.log(this.c);
		}
		func.bind(this)();
	},
	c : &#39;Hello!&#39;
}
a.b();
	</script>
############透過bind方法將this指向c物件中的內容。 ###############總結:以上就是這篇文章的全部內容了,從上面的文章中我們可以看出,誰調用的this就指向誰;全局中this指向window ;而且call(),apply()以及bind()方法可以改變this的指向。 ######################## ###

以上是在JavaScript函數中this指向的是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn