this關鍵字在javascript中是非常讓人困惑的。我們必須記住一點,
那就是this與定義無關,只與function調用的上下文有關。
當一個function從屬於某個對象時,this指向該對象。
var obj={
func: function(){
console.log(this);
}
};
obj.func();
此處this指向obj本身。
var obj = function(){};
obj.prototype.func = function(){
console.log(this);
};
var newObj = new obj();
newObj.func();
此種方式,this指向新創建的對象newObj;
當一個function從不屬於某個對象時,this指向全局對象window(嚴格模式下爲undefined);
var obj={
func: function(){
(function(){console.log(this);})();
}
};
obj.func();
此處的this由於function沒用從屬於某個對象,所以this指向全局對象window(嚴格模式下爲undefined);
在call和apply中,this指向傳入的context;
var func = function(){
console.log(this);
}
var obj = {};
func.call(obj);
func.apply(obj);
this指向obj;
在dom上附加事件時,this指向觸發事件的dom
<div οnclick="alert(this)">text</div>
this指向div這個dom;
在es6(es2015)中,箭頭函數不會改變this的指向。