js中this指向問題一直是個坑,以前一直是懵懵懂懂的,大概知道一點,但一直不知道各類狀況下指向有什麼區別,今天親自動手測試了下this的指向。
1.在對象中的this
對象中的this指向咱們建立的對象,例如:chrome
var obj ={ ccc : 1122, ddd : 2233, ded : function(){ console.log(this); } , fff : function(){ console.log(this === obj ); } } obj.ded(); obj.fff();
在chrome中執行的答案以下:函數
上圖咱們能夠看出咱們執行obj對象下的ded函數時,打印出來的事Object對象裏面的全部屬性,展現這個對象學習
能夠看到obj對象包含的方法和屬性都包含在this對象下面,再運行fff函數,把this和obj對象進行比較,能夠看出這兩個是恆等的,因此在對象裏的this指向這個對象。測試
2.直接調用函數時的this指向
先建立一個函數:this
function main(){ this.aad = 234; console.log(this); } main();
運行效果以下:spa
能夠看到咱們打印出來的this對象指向全局變量window,而建立的aad變量直接包含在了window對象下面了,因此直接調用函數時this是指向window對象的。code
3.構造函數中的this指向
當咱們建立一個構造函數時,而且實例化一個對象時,this的指向哪裏呢?先建立一個函數對象
function main(){ this.aad = 234; this.def = function(){ console.log(this); }; this.foo = function(){ console.log(this === xxx); }; this.xoo = function(){ console.log(this === main); }; } var xxx = new main(); xxx.def(); xxx.foo(); xxx.xoo();
能夠看出xxx.def函數仍是指向main函數,但這只是把上下文給打印出來了,但當咱們打印this與構造函數以及實現對象比較時就能夠看出區別了,與構造函數main比較出來的值是false;與xxx函數比較時顯示是true,因此構造函數this事指向當前實例化對象的。ip
這就是我關於this學習的總結,但願能給須要的人點幫助,而後有啥不足但願有大神能指點出來。it