解释一

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

要先明白存在call和apply的原因,才能记得牢一点: 在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.zhihu.com/question/20289071/answer/14745394
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。
因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。
二者的作用完全一样,只是接受参数的方式不太一样。例如,有一个函数 func1 定义如下:

var func1 = function(arg1, arg2) {};

就可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。

转自知乎,自个儿留着看,啧啧啧~~

转载于:https://www.cnblogs.com/martinl/p/7088749.html

炒鸡简单的javaScript的call和apply方法相关推荐

  1. arr 安卓调用qmui_QMUI(Android)炒鸡简单的配置详解

    最近由于工作紧张,没有更新博客,通过几个项目经验,小哥儿又准备了一大波Android开发技能跟大家分享. 来不及解释了,准备好了嘛?快上车! 1. QMUI已开源,页面开发新技能,腾讯出品,必属精品. ...

  2. Openpose——windows编译(炒鸡简单)

    前言 最近准备看看rtpose的代码,发现已经由openpose这个项目维护着了,由于经常在windows下调试代码,所以尝试了一下如何在windows下编译openpose源码,整体来说非常简单的. ...

  3. c#同时上传文件和参数,Java接收的完整教程,炒鸡简单!网上的教程弱爆了!

    工作需求,需要在c#端将文件和数据进行上传,Java端接收文件上传到oss,将数据处理到数据库. 这个教程,秒杀市面百分九十九的帖子,绝对是楼主精心打造! 一.网上的一般做法 网上搜出来的教程,基本都 ...

  4. 7王523(炒鸡简单的模拟题哦哦哦)

    描述 你玩过7王523吗? 这个扑克牌游戏可以2~5个人玩,最开始的时候,每人5张牌,庄家6张牌.庄家首先出牌,然后轮流出牌或不出牌. 第一个出牌的人可以打出任意牌,后面的人必须比前面的牌大才能出牌, ...

  5. 10秒搞定,苹果iPhone手机不用电脑换铃声,这个方法真的炒鸡简单!

    新老司机朋友们晚上好,隔壁老王又来和大家见面了~ 最近很多朋友都在吐槽苹果手机不能直接在手机上设置铃声,每次想设置一个自己喜欢的歌曲作为铃声还要连接电脑,也太麻烦了吧. 如果没有电脑呢?这个看似很简单 ...

  6. 炒鸡简单,带你快速撸一遍Numpy代码!

    作者:贾胜杰,硕士,退役军人,电气工程专业,现成功转行K12领域数据挖掘工程师,不仅在数据清理.分析和预测方向,而且在自制力和高效学习方面都有丰富经验. 编辑:王老湿 我们一起来学习Python数据分 ...

  7. 一个炒鸡简单计算拼音声母出现次数及概率程序

    及其原始代码,以防今后有类似场景需要使用,特意记录一下: 功能为计算拼音声母出现次数及概率 public static void main(String[] args) {//测试文本String t ...

  8. 算法:动态申请数组(new)后将数组所有元素置零(初始化数组)的方法(炒鸡简单)(C++语言)

    int *arr = new int [n]();//最后的括号,全置零.for(int i = 0;i<n;i++){cout<<arr[i]<<" &quo ...

  9. JavaScript中call和apply方法

    1 /* 2 在js中 call和apply常用于绑定作用域 3 */ 4 //1 简单的绑定 5 function sum(a,b){ 6 return a+b; 7 } 8 //将sum的功能绑定 ...

最新文章

  1. 如何评估自己对外界认知是否正确?
  2. Spring学习6之自动装配Bean02
  3. elasticsearch 启动、停止及更改密码
  4. php的integer,PHP整型 integer
  5. 面试官:Redis中的缓冲区了解吗
  6. .net 数据存储 mysql_asp.net实现存储和读取数据库图片
  7. mysql虚拟机授权错误,windows下用navicat链接虚拟机MySQL数据库的过程和问题解决
  8. 程序员大部分时间都在“熟悉系统”
  9. 硬盘读写测试工具_买了固态硬盘不知好坏?这些测试工具帮你大忙
  10. ki4so-发起一个史上最开源的sso项目
  11. ORA-07445ORA-00108错误案例
  12. java模拟器触屏_jar模拟器触屏版
  13. latex的下载与安装
  14. 苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...
  15. 神经网络计算棒怎么用,英特尔神经网络计算棒
  16. Java 自定义Excel数据排序
  17. css横向导航栏布局,CSS04--对齐、 布局、导航栏
  18. 数学表达式基础——2 集合、向量与矩阵
  19. python偶数数列求和_Numpy 斐波纳契数列求和
  20. 20230214不是情人的情人节

热门文章

  1. python画柱状图怎么规定x轴_Python:Matplotlib 画曲线和柱状图(Code)
  2. MS中Perl脚本实现原子随机掺杂(或生成空位)
  3. OJB中的多表查询和更新
  4. 比较好的NLP,KG学习网址-不断学习,不断收集,不断更新
  5. 运维工程师技术面试指导
  6. Linux下视频转换工具:转换,切割,连接,
  7. 我的QQ密保卡,不许偷看哦
  8. ROS(机器人操作系统)基础:(一) Linux系统(Ubuntu)介绍及安装
  9. 老菜鸟学PYthon - 高考志愿填报数据的实时采集
  10. 计算机病毒辽师大教案,2019年四年级信息技术下册 第二课 计算机病毒知识二教案 辽师大版.doc...