this的指向問題
阿新 • • 發佈:2018-03-26
col itl 一個 expand bsp 例子 {} 調用 body
聲明:本文來源“追夢子”大大的文章《徹底理解js中this的指向,不必硬背。》
偶遇此文自我總結一下,受益良多
例1: function a(){ var user = "追夢子"; console.log(this.user); //undefined console.log(this); //Window } a(); // 註意函數是在什麽作用域中調用的 //這個函數實在全局作用域中調用所以this指向的是window 全局中沒有user所以是undefineds 例2: var o = { user:"追夢子", fn:function(){ console.log(this.user); //追夢子 } } o.fn(); //這個函數是通過o.fn()點出來的,所以的指向的是o 強調一點:函數在創建的時候無法確定this的指向,誰調用這個函數this就指向誰 例3: var o = { a:10, b:{ a:12, fn:function(){ console.log(this.a); //12 } } } o.b.fn()
var o = { a:10, b:{ a:12, fn:function(){ console.log(this.a); //undefined console.log(this); //window } } } var j = o.b.fn; j(); // 註意這個實例 在這裏fn只是賦值給j並沒有調用,然後j在全局作用域下調用,所以這個this指向的是window
function Fn(){ this.user = "追夢子"; } var a = new Fn(); console.log(a.user); //追夢子 //這裏面的this通過this改變了this指向
三、當this遇到return時(需要特別註意)
function fn() { this.user = ‘追夢子‘; return {}; } var a = new fn; console.log(a.user); //undefined ---------------------------------------- function fn() { this.user = ‘追夢子‘; return function(){}; } var a = new fn; console.log(a.user); //undefined ---------------------------------------- function fn() { this.user = ‘追夢子‘; return 1; } var a = new fn; console.log(a.user); //追夢子 ------------------------------------------- function fn() { this.user = ‘追夢子‘; return undefined; //undefined是特殊的變量 } var a = new fn; console.log(a.user); //追夢子 ------------------------------------------ 總結:如果返回值是一個對象,那麽this指向的就是那個返回的對象 如果返回值不是一個對象那麽this還是指向函數的實例
註意:null也是對象但是這裏的this還是指向那個函數的實例
function fn() { this.user = ‘追夢子‘; return null; } var a = new fn; console.log(a.user); //追夢子
this的指向問題