为什么要改变 this 的指向?因为 this 的指向太灵活,太模糊,时不时的让丈二和尚摸不着头脑。或者一些其他的原因,需要让 this 指向其他对象,从而可以使用其他对象的方法。

用法示例

function f(x, y){
    console.log(this.x + this.y)
}

// 定义全局变量
var x=3, y =4;

// 在 nums 对象中定义
var nums={
    x:40,
    y:60
}

f(x,y) // 7

f.call(nums,x,y) //100
f.apply(nums,[x,y]) //100

var f2 = f.bind(nums,x,y) //Function
f2() //100

call() 与 apply()

f.call(nums,x,y)
f.apply(nums,[x,y])

将 f 中的 this 指向更改为 nums 对象,此时 x 与 y 的值均是 nums 对象中定义的

call() 与 apply() 的区别
两者的区别,主要在于传参的形式不同,call() 需要一个参数列表,一个一个的写参数,apply()则需要一个数组作为参数

特殊的bind()

f.bind(nums,x,y)() // 100

var f2 = f.bind(nums,x,y) //Function
f2() // 100

bind()的特殊在于他的返回值,是一个 Function ,所以需要使用括号 () 调用一下

案例

理解之后,套用一个经典案例,Math 对象对一个数组求最值

var arr = [1,3,5,7,9]

Math.max.apply(null,arr)
Math.min.apply(null,arr)

标签: javascript

评论已关闭