5 如何正確判斷this的指向

2021-10-21 06:20:19 字數 2002 閱讀 6629

5. this的指向

5.1 this繫結有四條規則。

function

foo(

)var a =

2foo()

//2

function

foo(

)var obj =

obj.

foo(

)//2

function

foo(

)var obj =

foo.

call

(obj)

//2

// 硬繫結

function

foo(

something

)var obj =

var bar =

foo.

bind

(obj)

var b =

bar(3)

// 2 3

console.

log(b)

//5

function

foo(a)

var bar =

newfoo(2

)console.

log(bar.a)

//2

5.2 判斷this的方法
規則優先順序從高到低

• 1. 函式是否在new中呼叫(new繫結)? 是,this繫結的是新建立的物件bar

var bar =

newfoo

()

var bar =

foo.

call

(obj2)

• 3. 函式是否在某個上下文物件中呼叫(隱式呼叫)? 是,this繫結的是obj1

var bar = obj1.

foo(

)

• 4. 都不是的情況下,使用預設繫結。 嚴格模式下,this繫結到undefined,否則繫結到全域性物件

var bar =

foo(

)

綜上:

5.3 繫結例外

function

foo(

a,b)

//把陣列「展開」成引數

foo.

(null,[

2,3]

)//a:2, b:3

//使用bind進行柯里化

var bar =

foo.

bind

(null,2

)bar(3

)//a:2, b:3

//使用更安全的this,

//使用object.create(null)替代null

var ∅ = object.

create

(null

)foo

.bind

(∅,2

)

function

foo(

)var a =

2var o =

var p =

o.foo()

//3(p.

foo(

)= o.

foo())

()//2

賦值表示式p.foo() = o.foo()的返回值是對目標函式的引用,呼叫位置是foo(),會應用預設繫結。

5.4 箭頭函式

如何判斷THIS指向?

什麼是this?this是用來做什麼的?這是首先我們必須知道的 this它是js的乙個關鍵字,用來指向某乙個物件 如何判斷this指向?函式 方法 內 一種以函式的方式呼叫 不帶.this指向window 一種以方法的形式呼叫 函式名前面帶.this指向點前面的 函式 方法 外,this指向wind...

如何判斷this指向?

什麼是this?this是用來做什麼的?這是首先我們必須知道的 this它是js的乙個關鍵字,用來指向某乙個物件 如何判斷this指向?函式 方法 內 一種以函式的方式呼叫 不帶.this指向window 一種以方法的形式呼叫 函式名前面帶.this指向點前面的 函式 方法 外,this指向wind...

this 的指向以及如何改變指向

this 永遠指向最後呼叫它的那個物件 箭頭函式語法比函式表示式更短,並且不繫結自己的this需要通過查詢作用域鏈來確定 this 的值,如果箭頭函式被非箭頭函式包含,this 繫結的就是最近一層非箭頭函式的 this。在函式內部使用 this this 先將呼叫這個函式的物件儲存在變數 this ...