JavaScript中this的存在為我們寫代碼提供了非常多的幫助,但是在具體使用的時候this的具體指向會變得各不相同,在本篇文章中,我們將詳細討論this的指向機制。
首先我們要明確一個概念,this既不是指向當前函數,也不是某個固定的對象,而是函數在執行時的環境對象。也就是是說,函數內this的指向只和函數是如何被調用的有關,和函數的定義方式以及位置等沒有必然的聯系。
1. 最普通的函數調用
上述案例中,我們可以認為全局函數demo是頂層對象window的方法,所以可以認為是window在調用demo函數,所以其中的this指向的是window對象。
- function demo(){
- console.log(this);
- }
- demo();
2. 對象方法中的this
在上面這個案例中,執行的雖然也是demo函數,但是在我們是通過obj對象對demo函數的引用訪問到demo函數的,所以可以認為是obj對象在調用函數demo,函數內this的this就要指向obj對象。
- function demo(){
- console.log(this);
- }
- var obj = {
- foo:demo
- }
- obj.foo();
3. 定時器中的this
在第一個定時器中,通過定時器執行函數demo時,可以依然認為demo是全局對象window的方法,所以是window對象在調用demo函數,所以this依然指向window。而第二個定時器中是一個匿名函數,一般匿名函數的執行具有全局性,也就是可以認為匿名函數是是在全局環境中被調用的,那么該定時器函數內的this就指向了全局環境對象window。
- function demo(){
- console.log(this);
- }
- setTimeout(demo,1000);
- setTimeout(function(){
- console.log(this);
- },2000);
>>本文地址:http://m.jecan.cn/zhuanye/2020/48500.html
聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?