pu369com

JavaScript 中 call()、apply()、bind() 的用法

1 myFun定义在window中

myFun=function(who){
console.log("name is:"+who)
}
var who1="dog"
var who2="sheep"
this.myFun.call(this,who1)  //输出:name is dog
myFun.call(this,who2)       //输出:name is sheep

myFun   who1 who2都是在window中定义的,myFun的第1个参数this指向window,第2个参数才是函数本身定义的参数。

2  myFun定义在obj1中

var obj1={
   name:'dog',
   myFun:function(where){
console.log("name is:"+this.name + "出生在"+where)
}
}
obj1.myFun.call(obj1,"北京")  //name is:dog出生在北京
var obj2={
  name:'sheep',
}
obj1.myFun.call(obj2, "上海")   //name is:sheep出生在上海
obj1.myFun.apply(obj2, ["上海"])
obj1.myFun.bind(obj2, '上海')

可将上述代码复制到chrome console中查看运行结果。

结论:

 call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
    call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面  obj.myFun.call(db,'成都', ... ,'string' );
    apply的所有参数都必须放在一个数组里面传进去  obj.myFun.apply(db,['成都', ..., 'string' ]);
    bind除了返回是函数以外,它 的参数和call 一样。
    
    当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!

 

参考:https://www.cnblogs.com/Shd-Study/p/6560808.html

 

posted on 2020-03-11 18:22  pu369com  阅读(143)  评论(0编辑  收藏  举报

导航