js中this指向有幾種情況

suliver發表於2021-09-11

js中this指向有幾種情況

在JavaScript中呼叫函式使用的過程中,this關鍵詞會根據函式的呼叫形式不同,引用上下文的物件也是不同的,也就是說this關鍵詞指向的物件是可以改變的。本文整理了this關鍵詞五種情況下,指向物件的不同。

情況一:全域性作用域或者普通函式自執行中this指向全域性物件window

console.log(this.document === document);  //true
console.log(this === window); //true

this.a = 37;  // 相當於建立了一個全域性變數 a
console.log(window.a); //37

情況二:事件函式內部的this指向事件源

function f1(){
  return this;
}
//在瀏覽器中:
f1() === window;   //在瀏覽器中,全域性物件是window
 
//在Node中:
f1() === global;

注意:事件函式中如果包含普通函式,普通函式自執行後,內部this還是指向window。

情況三:物件方法呼叫時,this指向呼叫的物件

let obj = {
    attr1: 3,
    func1: function() {
        console.log(this === obj) // 輸出:true
        console.log(this.attr1) // 輸出:3
    }
}
obj.func1()

情況四:當一個函式被call或者apply呼叫時,this指向傳入的物件的值

let obj = {
    fn: function(){
        console.log(this);
        }
}
obj.fn(); //objobj.fn.call(12); //12

情況五:箭頭函式中自身沒有this,this指向上級的this

const xiaoming = {
    name: '小明',
    say() {
        //this指向當前物件
        console.log(this)
    },
    wait() {
        setTimeout( () => {
            //this指向當前物件
            console.log(this)
        }, 1000)
    }
}

以上就是JavaScript中this指向的幾種清空,需要注意的是在各個場景中this取什麼值是在函式執行的時候確定的,不是在函式定義的時候決定的哦·更多JavaScript學習推薦:。

(推薦作業系統:win7系統、java10版,DELL G3電腦。)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2370/viewspace-2831095/,如需轉載,請註明出處,否則將追究法律責任。

相關文章