call和apply方法网上相关文章很多,大多是用简单的代码demo举例,这里用打比方的方式瞎扯下这两个方法到底是干嘛的?

回答这个问题前,先要明确一点,就是“JS是一门面向对象的语言”,JS处处是对象,而对象就是一个同时包含属性和方法的整体。比如数组对象Array,就有length属性,也有shift方法。“对象”就像一个家庭,“属性”就是家里的没有生命的家电家具,“方法”则是家庭的人类成员。

假设王家是穷光蛋,家徒四壁,李家是土豪,应有尽有。这是王家的儿子想过李家的日子,他要怎么办?最简单的方法就是改姓“入赘”成为李家人,成了一家人后,李家的东西就随便王二用了。这个“入赘”改姓入籍别人家享福的行为在JS世界就叫call或者apply。入赘别人家后自己老家的东西还能不能用呢?答案是一样用,JS的call和apply也是这样。

比如代码obj1.fn1.call(obj2)的意思在客观世界就是,obj1家的穷光蛋fn1入赘到obj2家,然后穷光蛋fn1就可以随便用土豪obj2家的东西了。同时,obj1.fn1.call(obj2)和obj1.fn1.apply(obj2)功能是一样的,那apply和call有啥区别呢?它们的区别就在传参的方式上,call和apply的第一个参数都是对象名(要入赘的家庭),后面都是参数,区别就是call的参数要一个个传,像obj1.fn1.call(obj2,1,2,3)这样,但是apply要用数组打包一起传,像obj1.fn1.call(obj2,[1,2,3])这样。

这里说call和apply是“入赘”的意思也不合适,感觉比喻成"结婚"更合适,参与结婚的人就同时成为了两家的人,然后两家的东西都可以用。再回到代码代码obj1.fn1.call(obj2)的意思,那就应该说是,obj1家的fn1嫁到obj2家,从此fn1在obj1和obj2家都像自己自己家一样,东西随便用。不过,一般用了aplly方法后,主要是想用obj2对方家的东西.

有的人可能会说,你能不能不扯淡,给我用可以运行的代码举个例子说说,那我就自荐一篇自己之前的文章:《apply和call对this的影响》

call方法 java_漫谈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]]]]])  定义:调用一个对象的一个方法,以另一个对象替换当前对象.  说明:  ...

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

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

  5. js中修改this的指向方法整理

    JavaScript(简称"JS") 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,Ja ...

  6. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  7. js中改变原数组的方法以及解决改变原数组的方法

    js中改变原数组的方法以及解决改变原数组的方法 参考文章: (1)js中改变原数组的方法以及解决改变原数组的方法 (2)https://www.cnblogs.com/Ingots/p/1151701 ...

  8. js中ES6新增的数组方法reduce(),和数组去重,降维。

    js中ES6新增的数组方法reduce() js数组reduce()详解 基本概念: reduce()方法接收一个函数作为累加器,数组中的每一值(从左到右)开始缩减,最后成为一个值 reduce()为 ...

  9. php js unescape,PHP实现JS中escape与unescape的方法

    本文实例讲述了PHP实现JS中escape与unescape的方法.分享给大家供大家参考,具体如下: JavaScript中的escape和unescape是吧字符串转换为unicode十六进制编码, ...

  10. 总结JS中常用的数组的方法大全

    总结JS中常用的数组方法 JS中常用的数组方法总结 数组(Array)是一种复杂的数据类型,它属于Object(对象)类型,用来将一组数组合在一起,通过一个变量就可以访问一组数据.在使用数组时,经常会 ...

最新文章

  1. 非此即彼的逻辑错误_超全MBA逻辑答题口诀,快收藏!
  2. 计算机硬件的作用论文,计算机硬件的作用论文.doc
  3. Java程序员需要掌握的计算机底层知识(三):进程、线程、纤程、中断
  4. 工作297:shift+$形成元
  5. Pytorch离线安装 matlibplot
  6. MATLAB 画图 x轴换成 字符串
  7. BZOJ3835 [Poi2014]Supercomputer 【斜率优化】
  8. 倒车雷达C语言程序,基于单片机汽车倒车雷达系统设计(含程序).doc
  9. Linux进程管理和怎样布置定时任务
  10. iOS开发 触觉体验(UIFeedbackGenerator)的使用
  11. STM32唯一序列号UID--HAL_GetUIDw0详解
  12. ubuntu18.04 下海康工业相机hikrobot_camera的使用及问题的解决
  13. 使用随机文件流类RandomAccessFile将一个文本文件倒置读出
  14. 为什么每个语言都要和Java作比较?一文带你搞懂!
  15. HTML5期末大作业:轮滑运动体育类人物介绍主题网站设计(12页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计
  16. JavaScript手风琴实现
  17. 【python】PLY词法分析实验「编译原理」
  18. TeamViewer14 ubuntu 破解商业环境
  19. IOS 将文字写绘制成图片并转换为像素数据
  20. C语言正数和负数循环右移,左移,把某正数的第m位(从0开始)到n位取反

热门文章

  1. 【Java设计模式】责任链模式
  2. 使用超链接实现企业QQ在线客服
  3. 到了2017还在苦等房价下跌的人,你们可以醒醒了!
  4. decay_rate, decay_steps ,batchsize,iteration,epoch
  5. 纯CSS3实现文字背景图滚动动画
  6. 组合数学 | 递推关系和母函数
  7. Newkirk effect and Morton effect
  8. 2021DASCTF实战精英夏令营暨DASCTF July X CBCTF 4th -- WP [pwn]
  9. Python量化策略风险指标
  10. Java的面向对象 -- 继承