您好,登錄后才能下訂單哦!
這篇文章主要講解了“Js中的this是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Js中的this是什么”吧!
this 是什么
理解this之前, 先糾正一個觀點,this 既不指向函數自身,也不指函數的詞法作用域。如果僅通過this的英文解釋,太容易產生誤導了。它實際是在函數被調用時才發生的綁定,也就是說this具體指向什么,取決于你是怎么調用的函數。也就是說誰調用的this,this就指向誰。
1.純粹的函數調用
這是函數的最通常用法,屬于全局性調用,因此this就代表全局對象。請看下面這段代碼,它的運行結果是1。
來看這段代碼:
var a = 2; function fun() {
}
console.log( this.a );
fun();
此時的打印結果是2。
因為fun()是直接調用的(獨立函數調用),沒有應用其他的綁定規則,這里進行了默認綁定,將全局對象綁定this上,所以this.a 就解析成了全局變量中的a,即2。此時的this相當于Window。
調用函數實質是window調用test方法,所以函數體內的this指向的是window。
2.作為對象方法的調用
函數還可以作為某個對象的方法調用,這時this就指這個上級對象。
function test() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.m = test;
obj.m();
此時打印結果為1;this相當于obj對象。
此時的test函數被用作了object對象的方法來調用,所以test里的this指向object。
3.作為構造函數調用
所謂構造函數,就是通過這個函數,可以生成一個新對象。這時,this就指這個新對象。
function test() {
this.x = 1;
}
var obj = new test();
4.call/apply 改變this的指向
function Person(name,age){
this.name = name;
this.age = age
}
var person=new Person("xu",18);
var obj = {}
Person.call(obj,"liu",20)
通過在控制臺打印我們可以看出,this現在指的是obj對象,所以說call可以改變this的指向。
call與apply的不同在于傳值時是以數組的方式:
Person.apply(obj,["liu",20] )
Apply() 是函數的一個方法,作用是改變函數調用的對象。它的第一個參數就表示改變后的調用這個函數的對象。因此,這是的this指的就是這第一個參數。
總結
1. 通常在函數中的this指向的是調用函數的哪個對象(誰調用指向誰)。
2. 事件函數中的this通常指向的是事件前的對象。
3. 構造函數中的this,(使用new調用構造函數創建對象),通常指向的是new所創建出來的對象本身。
4. 全局范圍的this通常指向的是全局對象(瀏覽器中是window)。
感謝各位的閱讀,以上就是“Js中的this是什么”的內容了,經過本文的學習后,相信大家對Js中的this是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。