JS中 call和apply的区别和作用
2个回答
展开全部
这个具体你可以度娘 很清楚的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-03-09
展开全部
先说区别call和apply的参数不同,前者是call(a,b,c,...)吧所有的参数都传递。后者apply只传递两个参数apply(a,b),其中b是一个数组。这是两者最大的不同,在于后者传递的是一个数组。在大多数情况下,两个函数可以相互替换的。你可以把apply当作call的糖衣写法。就好像js里面循环函数你可以用for也可以用while 一样。call和apply不是一定要怎么用的。
但是有时候apply更有用一些,比如我们需要传递一些不知道多少个数量的参数,就没法用call,而因为apply传递的是个数组,数组就比较容易适配各种参数的数量。
然后,说一说这两个函数的作用,调用一个对象的一个方法,以另一个对象替换当前对象。 这是比较书面的说法,比如:a.call(b),实际上执行的是在a的领域里执行b。有点绕是不是,这里就涉及到一个作用范围的问题,在全局范围下的确可以这样用,但是在面向对象的概念中。如果a是一个对象,而b是另一个对象,那么b中没有a的方法,如何能执行b的方法呢?通过a.call(b),就让b去执行了a的方法。很神奇吧,但是,一般用不上啦,不懂就不懂吧,当你写复杂一些的js插件和比较复杂的类的的时候,就很有用啦。
但是有时候apply更有用一些,比如我们需要传递一些不知道多少个数量的参数,就没法用call,而因为apply传递的是个数组,数组就比较容易适配各种参数的数量。
然后,说一说这两个函数的作用,调用一个对象的一个方法,以另一个对象替换当前对象。 这是比较书面的说法,比如:a.call(b),实际上执行的是在a的领域里执行b。有点绕是不是,这里就涉及到一个作用范围的问题,在全局范围下的确可以这样用,但是在面向对象的概念中。如果a是一个对象,而b是另一个对象,那么b中没有a的方法,如何能执行b的方法呢?通过a.call(b),就让b去执行了a的方法。很神奇吧,但是,一般用不上啦,不懂就不懂吧,当你写复杂一些的js插件和比较复杂的类的的时候,就很有用啦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询