this的指向問題

2022-07-27 07:12:09 字數 1316 閱讀 8343

this 的指向問題

第一種:指向呼叫者

function a()

a() //每乙個函式前面都會隱式的呼叫window,所以相當於window.a();

var a =

}a.fn() //a呼叫了fn 所以this指向的是a;

在舉個特殊的例子作對比

var a =

}var j = a.fn();

j()//在這裡this永遠指向他的呼叫者,但這裡fn雖然被a呼叫了,但賦值給變數 j的時候沒有執行所以最後的this是window

第二種:建構函式指向例項化的物件

function a()

var c = new a;

console.log(c.b);//1

第三種:有返回值的this情況

function a()

}var c = new a;

console.log(c.b) //undefined

function a()

}var c = new a;

console.log(c.b) //undefined

//如果返回的是物件,那麼this指向的就是那個物件

function a()

var c = new a;

console.log(c.b) // 1

function a()

var c = new a;

consoel.log(c.b) //1

//如果返回的不是物件,那麼this指向的還是例項化出的物件

特殊的null

null是物件但他並不會返回物件,而是返回例項化出來的物件

function a()

var c = new a;

console.log(c.b) //1

原因,在js設計初期並沒有null,null是之後新增的,為了不推翻以前的設 計思路就沒有使this在建構函式中返回null他本身

第一種:call()

var a =

}var c = a.fn;

c.call(a) //

call() 的傳參call(this,x,x,x)前面乙個要改變的this後面跟引數

var a =

}var c = a.fn;

c.call(a,11,111)

第三種:bind()

bind() 的傳參

var a =

}var c = a.fn;

var d = c.bind(a,11);

d(111,1111) //他可以在bind裡面傳參也可以在呼叫時傳參

this的指向問題

對於js基礎不是很好的我,一直不太懂this的指向問題。要搞懂這個還是得多動手。首先,我們知道 1.函式被呼叫時可以確定該函式內this的指向。因為函式中的this和arguments時兩個特殊的變數,在函式被呼叫時才會取得他們,而搜尋著兩個變數時只會在活動變數中找。2.確定函式被呼叫的位置,從而確...

this的指向問題

function foo var a 1 foo const obj obj.foo const c new foo function a console.log a 箭頭函式是沒有this的,箭頭函式中的this只取決包裹箭頭函式的第乙個普通函式的this。在這個例子中,因為包裹箭頭函式的第乙個普...

this的指向問題

宣告 本文 追夢子 大大的文章 徹底理解js中this的指向,不必硬背。偶遇此文自我總結一下,受益良多 例1 function a a 注意函式是在什麼作用域中呼叫的 這個函式實在全域性作用域中呼叫所以this指向的是window 全域性中沒有user所以是undefineds 例2 var o o...