Call,Apply,Bind

call:函数没有使用括号之前使用它可以改变里面函数的this指向(可以有多个参数,只有第一个表示要改变的对象)

1 .当一个obj里面没有某个方法,但是其他的某个对象有这个方法,我们就可以用call来使用其他对象的方法来操作本对象

1 .function cat(){

}
cat.prototype={
    "food":"fish",
    say:function(){
        c(this.food)
    }
}

const dog={
    food:'bone'
}

const c1=new cat();
c1.say.apply(dog)

2 .将参数和函数进行分离
function changeStyle(attr,value){
    this.style[attr]=value;
}
const box=document.getElementById('box')
window.changeStyle.call(box,'height','200px')
window.changeStyle.apply(box,['height','200px'])
//区别在于传递函数的方式

apply:(可以使用多个参数,但是多于的参数必须以数组的形式传入)

  1. 如果以上两个方法的第一个参数是null的话,那么指向window。
    2 .func.apply(thisArg, [argsArray])
    3 .thisArg:可选的,func函数运行时使用的this值。
    4 .利用apply可以使用一些本来需要写成遍历数组变量才可以使用的内建函数
let number=[1,2,3,4,5,6,7]
c(Math.max.apply(null,number))
c(Math.min.apply(null,number))


//大量的数组需要将参数切块之后循环传入目标方法。
function minofArray(arr){
    let min=Infinity
    let quantum=32768

    for(let i=0,len=arr.len;i

bind:

不同1:bind返回一个修改过的函数,必须再次调用才会起作用,前两个都是使用完直接就输出的。
不同2:他传入的参数是按照实参,形参结果表示的、

函数的使用场景

1 .作为某个对象的方法

1 .函数中的this往往指向的都是调用他的对象

2 .作为一个独立的函数,一般不在里面使用this

你可能感兴趣的:(Call,Apply,Bind)