一、函式內部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...