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 等等!