obj.call(thisObj, arg1, arg2, ...);
obj.apply(thisObj, [arg1, arg2, ...]);

两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj的属性和方法。或者说thisObj『继承』了obj的属性和方法。

唯一区别是apply接受的是数组参数,call接受的是连续参数。

function add(j, k){return j+k;
}function sub(j, k){return j-k;
}

我们在控制台运行:

add(5,3); //8
add.call(sub, 5, 3); //8
add.apply(sub, [5, 3]); //8sub(5, 3); //2
sub.call(add, 5, 3); //2
sub.apply(add, [5, 3]); //2

通过call和apply,我们可以实现对象继承。示例:

var Parent = function(){this.name = "yjc";this.age = 22;
}var child = {};console.log(child);//Object {} ,空对象Parent.call(child);console.log(child); //Object {name: "yjc", age: 22}

以上实现了对象的继承。

转载于:https://www.cnblogs.com/sunyujun/p/7133453.html

javascript中call apply的区别相关推荐

  1. JavaScript 中call apply 那点简单事

    谈谈JavaScript 中call apply 那点简单事 平常是否遇到过call apply 的问题 比如说 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply ...

  2. 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法

    by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法 (How to use ...

  3. 浅谈JavaScript中的apply、call和bind

    摘要 三种方法均可改变函数this关键字的指向. apply()接受一参数数组,返回函数执行的结果. call()接受一组参数,返回函数执行的结果. bind()接受一组参数,返回函数体.需在bind ...

  4. Javascript中的apply、call、bind

    apply . call .bind 三者都是用来改变函数的this对象的指向的: apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文: apply . ...

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

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

  6. JavaScript中call,apply,bind方法的总结。

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = {user:"追梦子",fn:fun ...

  7. 浅谈JavaScript中的apply,call和bind

    apply,call,bine 这三兄弟经常让初学者感到疑惑.前两天准备面试时特地做了个比较,其实理解起来也不会太难. apply MDN上的定义: The apply() method calls ...

  8. javaScript中const,var,let区别与用法详解

    业务场景:今天想从正则表达式数组对象取出几个参数的值,发现好多人都用的const声明的变量,这里一起总结一下吧. 上一篇-->前端使用正则表达式获取地址栏URL参数的值并将需要的参数值展示在页面 ...

  9. JavaScript中let和var区别详解

    想要了解var(ES5)和let(ES6)区别,首先就要了解ES5下JS的变量提升 一.变量提升(声) 当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用 ...

最新文章

  1. mysql释放表空间
  2. 【转】HTTP Header 详解
  3. linux火狐浏览器49.0安装教程,firefox for linux
  4. 数据库-ADONET-在数据集DataSet中使用关系对象DataRelation处理关系
  5. LeetCode 392打劫房屋 python
  6. 38--合并两个排序的链表
  7. 机器数,原码,反码,补码,移码
  8. OpenCV2:总结篇 imgproc(图像处理模块)
  9. 硬盘全新安装windows 7
  10. gevent的同步与异步
  11. DRAM的动态刷新问题总结
  12. linux UVC and hardware viewer
  13. VC Redist Installer 1.6下载
  14. Debian中Nvidia驱动、Firefox、Flash以及alsa声卡驱动安装详解
  15. zz:保护眼睛的颜色和各种背景颜色设置方法
  16. 无线渗透-----aircrack-ng破解WEP加密
  17. Bouncy Castle 密码包的配置及使用详解
  18. Tableau 空难统计分析(十)人类历史上的事故数和死亡人数
  19. 微信打不开链接怎么办,微信跳转外部浏览器打开
  20. 计算机考研400分以上,考研400分是什么概念?

热门文章

  1. 前沿 | 张钹院士畅谈清华大学如何办人工智能专业
  2. 一文带你读懂Self-Supervised Learning(自监督学习)
  3. 计算机原理实验八位算术逻辑运算,8位算术逻辑运算计算机组成原理实验一
  4. matlab函数包_Matlab论文插图绘制的270种补充颜色
  5. golang for循环_10. Go语言流程控制:for 循环
  6. Mysql 数据 导入 导出
  7. Wireshark使用入门
  8. 主板没有rgb接口怎么接灯_性价比稳定的RGB水冷散热器:乔思伯天使眼TW2-240测评...
  9. ES6-set集合应用
  10. Springboot利用poi导出excel下载