javascript中call、apply、bind的使用和他们之间的区别
首先看一个例子说明call的使用
有些童鞋纳闷,之前没这样用过呀。
其实这里我们用Car()直接调用的时候系统隐式的加了.call来执行的,所以Car()和Car.call()结果是一样的。
又有童鞋问了,那用call又有啥用呢?
其实用处大了,下面再举个例子。
原来是空对象的myCar在Car.call之后具有了brand和color属性,说白了就是更改了this的指向,使得this指向了call的第一个参数。
有童鞋问了那apply又有啥用呢?
其实与call相比只有一个区别:第二个参数为多个参数值合并的数组。
这下大家明白了吧,下面一个例子用apply实现一个函数对另一个函数属性的继承。
可见用了apply关键字实现Cat_1函数对Cat函数属性的继承,Cat_1同样有sleep方法。
那bind又怎么使用呢?
bind 方法后面多了个 () 外 ,结果返回都一致。
总结:
1、call()、apply()、bind() 都是用来重定义 this 这个对象的!
以上除了 bind 方法后面多了个 () 外 ,结果返回都一致!
由此得出结论,bind 返回的是一个新的函数,你必须调用它才会被执行。
2、对比call 、bind 、 apply 传参情况下
上述结果不难看出:
call 、bind 、apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
call 的参数是直接放进去的,apply 的所有参数都必须放在一个数组里面传进去 。
bind 除了返回是函数以外,它的参数和 call 一样。