關於this指向的問題

this指向的規則

  1. 默認綁定
  2. 隱式綁定
  3. 顯示綁定
  4. 構造函數綁定
  5. new 綁定

一、默認綁定

默認即約定俗成,this指向全局對象window,嚴格模式下this爲undefined。bash

this.a === window.a // true函數

var a = 1;ui

this.a // 1this

嚴格模式

use strictspa

this === window // falsecode

this === undefined // true對象

二、隱式綁定

顧名思義,隱式綁定大致上能夠理解爲一個對象有一個屬性爲函數,此時這個函數的this指向的是調用它的對象所處的自身,直接上代碼:get

例一

var name = 'windowName'

let obj = {

    name: 'name',
    
    getName: function() {
    
        console.log(this.name)
        
    }
};

obj.getName(); // name 此時是obj調用的getName方法,因此this指向obj

let obj2 = obj.getName;

obj2(); // windowName 此時是window調用的obj2方法,因此this指向window,即window.obj2()

複製代碼

進階,在對象的函數裏再嵌套一層函數

例二

var name = 'windowName'

var obj = {

    name: 'name',
    
    getName: function() {
    
        return function() {
            console.log(this.name)
        }
        
    }
};

obj.getName()(); // windowName 

var obj2 = obj.getName;

obj2()(); // windowName
複製代碼

咦?爲何都是windowName呢?

原來,obj.getName()返回的是一個functionstring

而function的this指向的是window,因此報出來的是windowName.obj2()it

同理,例一 中的obj2也是同理,obj2 === obj.getName 返回的也是一個function,因此obj2的this指向的也是window

因此我們能夠得出,隱式綁定根據的是調用者的上下文環境

相關文章
相關標籤/搜索