函式內部This的指向問題

2021-10-25 22:24:33 字數 2104 閱讀 1441

一、函式內部this的指向

this的指向是根據呼叫者來確定的,呼叫的方式不同,this的指向不同。如下所述:

1.普通函式的呼叫中,函式內部的this指向全域性的window

functionfn(

)fn()

<

/script>

//此處的thi指向的是window

//故呼叫該函式控制台輸出的結果為window

2.建構函式的呼叫中,this指向的是new出來的例項化物件

function

fn(name,age,***)

var fn1 =

newfn

('張三',20

,'男'

)<

/script>

//輸出結果為:fn

//故,建構函式中的this指向的是new出來的例項化物件

3.物件方法的呼叫中,this指向的是該方法所屬的物件

var obj =

} obj.

say(

)<

/script>

//輸出結果為:

//故,物件方法呼叫中的this指向的是該方法所屬的物件

4.繫結事件方法中,this指向的是繫結事件的物件

"but"

>按鈕<

/button>

$('#but').

on('click'

,function()

)<

/script>

<

/body>

//輸出結果為:​按鈕​​

//故:繫結事件方法中的this指向的是繫結事件的物件

5.定時器函式中,this指向的是window

setinterval

(function()

,3000

)<

/script>

//輸出的結果為:window

//故,在定時器函式中this的指向是window

6.立即指向函式中,this指向的是window

(

functionfn(

))()

//輸出的結果為:window

//故,在立即執行函式中this的指向是window

二、如何改變this的指向

1.call方法

call()的特點:

1.呼叫函式

2.改變this的指向

3.經常用做繼承

**演示:

var obj =

function

fn(a, b);fn

()//輸出結果:window

// 此時的this指向的是window

fn.call

(obj,1,

2)//輸出結果:和3

//此時的this指向的是物件obj

var obj =

function

fn(a, b);fn

()//輸出結果:window

// 此時的this指向的是window

fn.(obj,[1

,2])

//輸出結果:和3

//此時的this指向的是物件obj

3.bind方法

bind()的特點:

1.不呼叫函式

2.改變this的指向

3.返回乙個新的陣列

4.經常在不需要呼叫函式但是需要改變this的指向時使用

var obj =

;function

fn(a, b)

;var fn1 = fn.

bind

(obj,1,

2);fn1()

//輸出結果:和3

//此處的fn1是bind返回的新函式

//此時的this指向的是obj物件

改變函式內部 this 指向

var o function fn a,b fn.call o,1,2 var arr 1 66,3 99,4 var max math.max.math,arr var min math.min.math,arr console.log max,min bind 方法 bind 方法不會呼叫函式。...

js中改變函式內部this指向的方法

1 call 方法呼叫乙個物件。簡單理解為呼叫函式的方式,但是它可以改變函式的 this 指向 一般應用於繼承 var o function fn a,b fn 此時的this指向的是window fn.call o,1,2 此時的this指向的是物件o,引數使用逗號隔開 經常用域陣列中 var o...

箭頭函式this指向問題

前言 線下筆試碰到的題目,發現學習掌握的不透徹,所以回來填坑 const obj1 const obj2 console.log obj1.func.bind obj2 輸出結果為 剛開始很疑惑結果,於是做了個對比 const obj1 const obj2 console.log obj1.fun...