1. 程式人生 > >Web前端面試指導(三十一):談談你對this的理解

Web前端面試指導(三十一):談談你對this的理解

題目點評

主要考察你對面向物件程式設計的理解,特別是物件的指向問題,如果連物件的指向都搞不清楚,很難說明你是一個優秀的前端開發人員,所以回答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原始碼。