1.call方法可以调用函数 还可以改变函数内部的this指向,主要作用是可以实现继承:
fn.call(thisObj, arg1, arg2 ...)
2.apply方法可以调用函数 还可以改变函数内部的this指向,但是他的参数必须是数组[伪数组] :
fn.apply(thisObj, [arg1, arg2 ...])
apply方法可以借助于数学内置对象求数组中的最大值或最小值:
var arr = [1, 2, 33]
var max = Math.max.apply(Math, arr) // Math.min.apply()
3.bind方法不会调用函数,但是能够改变函数内部的this指向
如果有的函数我们不需要立即调用,但是又想改变这个函数内部的this指向[如改变定时器内部的this指向] 此时可以使用bind
例:有一个按钮,当点击后就禁用这个按钮 并在3秒钟后开启这个按钮
var btn = document.querySelector('button')
btn.onclick = function () {
this.disabled = true
setTimeout(function () { // 定时器中的this 指向的是window
this.disabled = false // 此时的定时器中的this指向的是btn
}.bind(this), 3000)
}