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 一样。

posted on 2021-03-26 11:58  程序员阿田  阅读(719)  评论(0)    收藏  举报

导航