this 是隱藏的第一個(gè)參數(shù),且一般是對(duì)象
function f(){
console.log(this)
console.log(arguments)
}
f.call() // window []
f.call({name:'frank'}) // {name: 'frank'}, [] 第一項(xiàng)是this,后面的是arguments
f.call({name:'frank'},1) // {name: 'frank'}, [1]
f.call({name:'frank'},1,2) // {name: 'frank'}, [1,2]
arguments是個(gè)偽數(shù)組
image.png
this 為什么必須是對(duì)象
因?yàn)?this 就是函數(shù)與對(duì)象之間的羈絆
image.png
假如這里傳的是個(gè)數(shù)字10,也會(huì)被new Number(10)下,變成數(shù)字對(duì)象
image.png
image.png
// 新手疑惑的兩種寫法
var fn = person.sayHi
person.sayHi() // this === person
fn() // this === window
fn.call(asThis, p1,p2) 是函數(shù)的正常調(diào)用方式
當(dāng)你不確定參數(shù)的個(gè)數(shù)時(shí),就使用 apply
fn.apply(asThis, params)