call()
、apply()
、bind()
都是用来干嘛的?我们先来看2个例子
-
例1的运行结果:
-
例2的运行结果:
比较一下这两者的
this
的差别,第一个打印里面的this
指向obj
;第二个全局声明的shows()
函数,this
是window
。而call()
、apply()
、bind()
方法就是用来重新定义this
这个对象的!如:
以上返回的结果都是一致的,this
指向了db
对象,只是bind
方法后面多了一个()
,由此也得出结论,bind
返回的是一个新的函数,你必须重新调用它才会被执行。
- 我们再对比一下
call
、apply
、bind
传参的情况:
从上面4个结果可以看出:
call
、bind
、apply
这三个函数的第一个参数都是this
的指向对象,第二个参数有差别了:
call
的参数是直接放进去的,第二个,第三个第n个参数都用逗号分割,直接放到后面obj.myFun.call(db,“河南”,“深圳”,…,“string”)。apply
的所有参数都必须放在一个数组里面传进去obj.myFun.apply(“db”,[“河南”,“深圳”,…,“string”])。bind
除了返回是函数以外,它的参数和call
是一样。当然三者的参数不限定是string
类型,允许是各种类型,包括函数,对象等等!