作者:杨志
链接:https://www.zhihu.com/question/20289071/answer/14644278
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在javascript OOP中,我们经常会这样定义:

function cat(){
}
cat.prototype={
food:"fish",
say: function(){
alert("I love "+this.food);
}
}

var blackCat = new cat;
blackCat.say();

但是如果我们有一个对象whiteDog = {food:"bone"},我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:blackCat.say.call(whiteDog);

所以,可以看出call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array。它不能应用Array下的push,pop等方法。我们可以通过:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
这样domNodes就可以应用Array下的所有方法了。

其他的就不提了,讲多了反而迷惑。

转载于:https://www.cnblogs.com/timlong/p/9204763.html

js中的call及apply相关推荐

  1. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS 1.方法定义 call方法:  语法:call([thisObj ...

  2. JS中的call和apply

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  3. js中call()方法和apply方法的使用

    1. 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  4. JS中的call()和apply()方法

    1.方法定义 call方法:  语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])  定义:调用一个对象的一个方法,以另一个对象替换当前对象.  说明:  ...

  5. JS中的call、apply、bind方法详解

    bind 是返回对应函数,便于稍后调用:apply .call 则是立即调用 . apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(co ...

  6. js中的call和apply方法的区别

    一.call和apply的说明 1.call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以 ...

  7. js中的call和apply用法总结

    1.call和apply的作用 这两个方法的作用是一样的 每个函数中都包含call和apply. this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向 ...

  8. JS中函数的调用和this的值

    调用每一个函数会暂停当前函数的执行,传递控制权和参数给新函数.除了声明时定义的形式参数,每个函数还接收两个附加的参数:this 和 arguments. 参数this在面向对象编程中非常重要,他的值取 ...

  9. 随笔——js中的this指向,apply()与 call()

    js中apply和Math.max()函数(原文) apply() Function.apply() 是JS的一个OOP特性,一般用来模拟继承和扩展this的用途,对于上面这段代码,可以这样去理解: ...

  10. 理解js中的this指向以及call,apply,bind方法

    <script> function a(){var user = "追梦子";console.log(this.user); //undefinedconsole.lo ...

最新文章

  1. web.py搭建服务器
  2. spring mvc mysql配置_spring mvc配置数据库连接
  3. 【OGG】OGG的单向复制配置-支持DDL(二)
  4. 利用BIND 9基于电信网通智能DNS 搭建
  5. Python 应用 uWSGI + Nginx 部署
  6. Faster R-CNN论文详解
  7. python结束线程_2018-01-02 如何优雅地终止python线程
  8. Docker - 避免启动container后运行shell脚本执行完成后docker退出container
  9. C语言 va_start 宏 - C语言零基础入门教程
  10. vb net的定时循环_.NET工具ReSharper:如何帮助Visual Studio用户?
  11. navicat工具把SQL Server数据库转换MySQL数据库
  12. Python函数式编程,map/reduce,filter和sorted
  13. 守护你一生-守护线程(Java)
  14. keepalived详解(二)——keepalived安装与配置文件
  15. COPRA RF 2005 SR1最新版 (冷弯成型,轧辊设计)
  16. 科大讯飞与IBM组队人工智能蓝蓝CP
  17. 网站流量分析的整体思路(大数据)
  18. 自来水管道铺设问题——数学建模
  19. Modularity(模块性)
  20. 一站购遍全球 史上最长亚马逊Prime会员日即将开启

热门文章

  1. 管理新语:搞绩效考评需谨慎,切勿随意
  2. LINUX SHELL获得CPU核心(线程)个数
  3. NDK编译doubango时出现错误:undefined reference to ‘stderr‘
  4. 编译WINDOWS版FFmpeg:编译FFmpeg
  5. Android中sendMessageAtTime()的用法
  6. IPCamera可以通过BackChannel进行对讲?
  7. oracle日期按时间点过滤,Oracle数据库日期过滤方法性能比较
  8. php 字符如何与16进制数比较大小
  9. access字段类型varchar_Access SQL语句创建表对应的数据类型名称
  10. 单价数量和总价的公式_小学数学量的计算单位及常用公式表