教你徹底弄懂JS中this的指向


JS 中 this 機制

  • 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

2.作為對象方法的調用

函數還可以作為某個對象的方法調用,這時this就指這個上級對象。

function test() {
  console.log(this.x);
}

var obj = {};
obj.x = 1;
obj.m = test;

obj.m(); 

此時打印結果為1;this相當於obj對象

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] )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM