JS中call,apply,bind的区别

1.关于this对象的指向,请看如下代码

var name = 'jack';
var age = 18;
var obj = {
    name:'mary',
    objAge:this.age,
    myFun:function(){
        console.log(this.name,this.objAge,this.age)//当前this对象指向obj故this.age是undefined
    }
}
输出

var windowName = 'myWindow';
var obj2 = {
    name:'tom',
    age:22,
}
var show = function(){
    console.log(this.obj2.name,this.obj2.age,this.windowname)//当前this对象指向window对象
}

输出

 2.那如何改变方法调用时的this指向呢,其实call()、apply()、bind() 就是用来重定义 this 这个对象的!请看代码

var name = '老王',age=30;
var obj = {
    name:'小张',
    objAge:this.age,
    myFun:function(){
        console.log(this.name,this.age);    
    }
}
var otherObj = {
    name:'张三',
    age:33
}

输出

 

 myFun的this对象指向的是otherObj.不同的是bind返回的是一个函数需要手动执行

 

3.call 、bind 、 apply 如何进行传参呢又有什么区别呢

var name = '老王',age=30;
var obj = {
    name:'小张',
    objAge:this.age,
    myFun:function(param1,param2){
        console.log(this.name,this.age,param1,param2);    
    }
}
var otherObj = {
    name:'张三',
    age:33
}

输出

 

call的参数用逗号隔开可以传任意多个参数,apply的参数是一个数组,bind的参数也是用逗号隔开

当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

4.call 、bind 、 apply 常用形式

  

//例如求最大最小值,this对象用不到故可以传任意对象
Math.max.apply(undefined,[1,2,3,4])
Math.max.call(undefined,1,2,3,4,5)
Math.max.bind(undefined,1,3,5,7,9)()

 

posted on 2020-09-06 14:16  英哥boss  阅读(70)  评论(0)    收藏  举报