this指向
JavaScript的this總是指向一個對象,具體指向的對象根據運作時函數執行的環境動态綁定的,并不是函數聲明時的環境,簡單的了解就算函數或方法被那個對象調用就指向改對象。
this的指向大緻分為以下4種;
1. 作為對象的方法調用,指向該對象;
var color={
Item:"red",
getItem:function(){
console.log(this===color);//true
console.log(this.Item);//"red"
}
}
color.getItem();
2. 作為普通函數調用,指向window;
window.name='global';
var getName=function(){
return this.name;
}
console.log(getName());//gloabl
/**嚴格模式下,this是undifined**\
3.構造器調用,無對象傳回時指向該對象,有對象傳回指向被傳回對象;
var myClazz = Function(name) {
this.name = name;
};
var obj = new myClazz('jane');
console.log(obj.name);//jane
var myClazz = Function(name) {
this.name = name;
return {name:'rose'};
};
var obj = new myClazz('jane');
console.log(obj.name);//rose
4.與普通函數調用相比,call、apply調用能動态改變this指向。
var obj = {
name: 'jane'
};
var obj_ = {
name: 'rose'
};
window.name = 'window';
var getName = function(){
alert(this.name);
};
getName(); // 輸出: window /**普通函數調用指向window**\
getName.call(obj); // 輸出: jane /**this指向obj**\
getName.call(obj_); // 輸出: rose /**this指向obj_;**\