什麼是this:
簡單來說在呼叫函式時,指向正在呼叫函式的物件的 關鍵字
何時使用:
只要物件 自己的方法,要使用自己的屬性時,就用this
下面說一下常用到的各種情況:
1. 物件內部的方法,被物件自己呼叫:
var ename="scott"; var obj={ ename:"eric", fun:function(){ console.log(this.ename); } }
obj.fun(); // this->obj
2. 函式傳遞給其他變數儲存:
var fun=obj.fun; fun(); // this->window scott
this和定義在哪兒無關!
只和呼叫時,使用的物件( . 前的物件)有關,如果沒有用任何物件,就直接呼叫的函式this->window
3. 使用call/apply 臨時替換this —— 臨時的
this->call/apply的第一個引數物件
4. 使用bind基於一個函式建立一個新函式,同時提前繫結this,永久的,不可被替換的!
5. 繫結事件處理函式:// function fun(){…}
1. html: 繫結:<button onclick="fun()"> this->??? btn.onclick=new Function("fun()") function(){//this->btn fun();//this->window } 呼叫: btn.onclick();//this->btn
2. js: 繫結: btn.onclick=fun; //this->btn btn.addEventListener("click",fun); fun中的this->btn 呼叫: btn.onclick();//btn.fun();
3. 在物件的方法內部繫結事件處理函式: 事件處理函式中要求 既使用物件的屬性,又使用當前事件繫結的元素物件: 不能用bind!因為bind會將當前事件繫結的元素物件 替換 解決: 留住this : var me=this
6. 定時器回撥和匿名函式自調: this預設都指window;如果希望使用所屬物件的屬性: 用bind永久替換this