JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。

先来看看JS手册中对call的解释:

call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2,  , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。

引用网上一个代码段,运行后自然就明白其道理。

<input type="text" id="myText"   value="input text">
<script>
    function Obj(){this.value="对象!";}
    var value="global 变量";
    function Fun1(){alert(this.value);}

window.Fun1();   //global 变量
    Fun1.call(window);  //global 变量
    Fun1.call(document.getElementById('myText'));  //input text
    Fun1.call(new Obj());   //对象!
</script>

call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
运行如下代码:

<script>
   var func=new function(){this.a="func"}
    var myfunc=function(x){
        var a="myfunc";
        alert(this.a);
        alert(x);
    }
    myfunc.call(func,"var");
</script>

可见分别弹出了func和var。到这里就对call的每个参数的意义有所了解了。

对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])

同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入

出处:(http://www.cnblogs.com/treasurelife/archive/2008/03/05/1092251.html)

转载于:https://www.cnblogs.com/51xzdy/archive/2012/05/31/2529064.html

javascript:call和apply函数的用法(转载)相关推荐

  1. python里apply用法_Python apply函数的用法

    Python apply函数的用法 发布于 2014-08-07 21:02:24 | 674 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向对象.解释型计 ...

  2. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...

  3. pandas的apply函数常见用法总结

    函数介绍 pandas的apply函数通常用于一些复杂的遍历操作(遍历可迭代对象的同时执行一些自定义函数),它的可定制程度高,而且比itterrows.for等操作效率更高,是我非常喜欢而且常用的一个 ...

  4. python 多进程 multiprocessing 进程池 pool apply_async()函数与apply()函数的用法

    apply函数主要用于传递不定参数,主进程会被阻塞到函数执行结束.也就是说只有apply里面的内容被执行完了,才会进行执行主函数的内容. 参考文章1:python进程池Pool的apply与apply ...

  5. Kotlin中的also、let、run、with、apply函数的用法

    在Kotlin中有几个十分相似的标准库函数,他们之间也有一些差异,如果使用不当可能回得到与预期相反的效果,所以我们来简短的区分一下let.also.run.with.apply 这5个标准库函数的区别 ...

  6. python apply函数的用法_Python pandas.DataFrame.apply函数方法的使用

    DataFrame.apply(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **k ...

  7. 复习javascript中call,apply,bind的用法

    一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...

  8. python apply函数的用法

    函数格式为:apply(func,*args,**kwargs) 用途:当一个函数的参数存在于一个元组或者一个字典中时,用来间接的调用这个函数,并肩元组或者字典中的参数按照顺序传递给参数 解析:arg ...

  9. pandas apply() 函数用法

    理解 pandas 的函数,要对函数式编程有一定的概念和理解.函数式编程,包括函数式编程思维,当然是一个很复杂的话题,但对今天介绍的 apply() 函数,只需要理解:函数作为一个对象,能作为参数传递 ...

最新文章

  1. 如何给前三条最新信息旁边加上一个红旗
  2. jQuery js 互转
  3. Oracle中判断空游标的方法
  4. 【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )
  5. 计算Be原子基态能级
  6. Kali 远程登陆SSH
  7. myeclipse中的一些设置
  8. ES6对象(1):新增语法与API
  9. 职场‘下班沉默症’调查
  10. 微处理器硬件喂狗_硬件基础:微控制器到底是什么?
  11. .NET : 在定义项目模板的时候使用占位符
  12. java for 死循环_一个Java For语句死循环的例子源码
  13. 苹果维修服务器gsx查询,手机苹果官网怎么查序列号(苹果gsx免费查询公众号)...
  14. PoE交换机可以当普通交换机吗?
  15. CuteHttpFileServer: 一键搭建文件共享服务器
  16. #457 科技乱炖:去中心化的Damus,会比Twitter更好么
  17. 通过jenkins构建服务,并发布服务,修改Jenkins以Root用户运行
  18. 【C语言】自动售货机
  19. 免费可商用图片素材、高清无版权图片、免费可个人和商业用途图片
  20. 2019年科技发展预测:云、大数据、AI、物联网和区块链

热门文章

  1. IPhone 应用程序管理
  2. c#:winform鼠标拖动窗口大小时,设定窗口最小尺寸
  3. 子进程 post-installation script 返回了错误号 解决方法
  4. b+树阶怎么确定_你知道危险品运输是怎么包装的吗?
  5. eclipse远程连接hadoop_1个文件,3个类,mapreduce就是这么简单,动手搭建Hadoop(8)...
  6. 1814: 一元三次方程求解
  7. 阿里云容器服务全面升级,让云的边界拓展至企业需要的每个场景
  8. 函数计算助力高德地图平稳支撑亿级流量高峰
  9. 荷小鱼 x mPaaS | 借助 H5 容器改善 App 白屏、浏览器兼容问题
  10. 《铲子骑士》:“复古游戏”的集大成者