JS this的理解與運用

在函數(shù)執(zhí)行的時候,this總是指向調(diào)用該函數(shù)的對象。
要判斷this的指向,其實就是判斷this所在的函數(shù)屬于誰。

在《JavaScript語言精粹》這本書中,把this出現(xiàn)的場景分為4類,簡單說就是:

1. 有對象 就指向調(diào)用對象

var myObject = {value:100};  
 myObject.getValue = function(){  
     console.log(this.value);//輸出100  
     console.log(this);//輸出 { value: 100, getValue: [Function] }  
 }  
 myObject.getValue();  
// getValue() 屬于對象 myObject,并由 myOjbect 進(jìn)行 . 調(diào)用,因此 this 指向?qū)ο?myObject。 

2.沒調(diào)用對象就指向全局對象

var myObject = { value: 100 };  
myObject.getValue = function() {  
    var foo = function() {  
        console.log(this.value) // 輸出 undefined  
        console.log(this); // 輸出全局對象 global    
         //foo 函數(shù)雖然定義在 getValue 的函數(shù)體內(nèi),但實際上它既不屬于 getValue 也不屬于 myObject。  
        // foo 并沒有被綁定在任何對象上,所以當(dāng)調(diào)用時,它的 this 指針指向了全局對象 global。  
    };  
    foo();  
    return this.value; //這個this 在 getValue中,從而指向 myObject。  
};  
console.log(myObject.getValue()); // 輸出 100 
  1. 用new構(gòu)造就指向新對象
//js 中,我們通過 new 關(guān)鍵詞來調(diào)用構(gòu)造函數(shù),此時 this 會綁定在該新對象上。  
var SomeClass = function() {  
    this.value = 100;  
}  
var myCreate = new SomeClass();  
console.log(myCreate.value); // 輸出10
  1. 通過 apply 或 call 或 bind 來改變 this 的所指
// apply 和 call 調(diào)用以及 bind 綁定: 指向綁定的對象  
// apply() 方法接受兩個參數(shù)第一個是函數(shù)運行的作用域, 另外一個是一個參數(shù)數(shù)組(arguments)。  
// call() 方法第一個參數(shù)的意義與 apply() 方法相同, 只是其他的參數(shù)需要一個個列舉出來。  
// 簡單來說, call 的方式更接近我們平時調(diào)用函數(shù), 而 apply 需要我們傳遞 Array 形式的數(shù)組給它。 它們是可以互相轉(zhuǎn)換的。  
//apply和call的功能是一樣的,只是傳入的參數(shù)列表形式不同。
//var a1 = add.apply(sub,[4,2]);  //sub調(diào)用add的方法
/*call的用法*/
//var a1 = add.call(sub,4,2);
var myObject = { value: 100 };  
var foo = function() {  
    console.log(this);  
};  
foo(); // 全局變量 global  
foo.apply(myObject); // { value: 100 }  
foo.call(myObject); // { value: 100 }  
var newFoo = foo.bind(myObject);  
newFoo(); // { value: 100 }</span>  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.概念 在JavaScript中,this 是指當(dāng)前函數(shù)中正在執(zhí)行的上下文環(huán)境,因為這門語言擁有四種不同的函數(shù)調(diào)...
    BluesCurry閱讀 1,253評論 0 2
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 7,008評論 15 54
  • 涵義 this關(guān)鍵字是一個非常重要的語法點。毫不夸張地說,不理解它的含義,大部分開發(fā)任務(wù)都無法完成。 首先,thi...
    許先生__閱讀 678評論 0 4
  • 函數(shù)和對象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,968評論 0 5
  • 我知道自己的分量,我只做好自己就夠了,其他的一律閉嘴不說,想讓我說我也不會說的,因為沒必要,跟我有什么關(guān)系啊
    大小丫丫的媽媽閱讀 178評論 0 0

友情鏈接更多精彩內(nèi)容