Web前端面試指導(三十一):談談你對this的理解
阿新 • • 發佈:2019-01-08
題目點評
主要考察你對面向物件程式設計的理解,特別是物件的指向問題,如果連物件的指向都搞不清楚,很難說明你是一個優秀的前端開發人員,所以回答this的知識點是體現你的身價的時候到來了!如果能夠回答好這個問題,那麼在面試上你是增值的。個人建議,可以先回答this在不同的場合指向的是什麼,在來回答什麼時候用到this,這樣回答的邏輯會比較好。
this的指向
this表示當前物件,this的指向是根據呼叫的上下文來決定的,預設指向window物件,指向window物件時可以省略不寫,例如:
this.alert() <=> window.alert()<=> alert();
呼叫的上下文環境包括全域性和區域性
全域性環境
全域性環境就是在<script></script>裡面,這裡的this始終指向的是window物件,
<script> console.log(<strong>this</strong>);//指向window物件 </script>
區域性環境
1)在全域性作用域下直接呼叫函式,this指向window
function func(){ console.log(this) ;//this指向的還是window物件 } func();
2)物件函式呼叫,哪個物件呼叫就指向哪個物件
<input type="button"id="btnOK" value="OK"> <script> varbtnOK=document.getElementById("btnOK"); btnOK.onclick=function(){ console.log(this);//this指向的是btnOK物件 } </script>
3)使用 new 例項化物件,在建構函式中的this指向例項化物件。
var Show=function(){ this.myName="Mr.Cao"; //這裡的this指向的是obj物件 } var obj=new Show();
4)使用call或apply改變this的指向
var Go=function(){ this.address="深圳"; } var Show=function(){ console.log(this.address);//輸出 深圳 } var go=new Go(); Show.call(go);//改變Show方法的this指向go物件
加分項
1. 用於區分全域性變數和區域性變數,需要使用this
var age=20; function show(age){ this.age=age; }
2.返回函式當前的物件,看jquery1.8.3原始碼。
3.將當前的物件傳遞到下一個函式,看jquery1.8.3原始碼。