js中call()与apply()方法

自动驾驶关键技术(一):时间敏感网络TSN 时间敏感网络TSN的基本概念、协议族介绍和开发流程。 阅读详情

菜鸟级别的选手,学习+意会。欢迎指正

参考文章

http://uule.iteye.com/blog/1158829
http://blog.youkuaiyun.com/myhahaxiao/article/details/6952321

语法规则

call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])

apply方法:
语法:apply([thisObj[,argArray]])

第一个参数。就是你用来替换函数中的this的那个对象。

由于apply,call是定义在Function.prototype上的,所以,只要是函数都可以调用这两个方法(原型链)。

小例子

    var obj = {
        name : 'hanker'
    };
    function f(a,b){
        console.log(this.name);  //hanker
        console.log(a); //1
        console.log(b); //2
    }
    f.call(obj,1,2);
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

作用:Apply,与call的作用都是一样:更改函数内部的this,让它指向第一个参数。

上面的小例子展示了call的基本用法。前面f视为一个对象,他使用对象的call()方法,参数为3个。上面小例子中只有一个参数
我们可以粗劣的把f.call(obj);视作执行f(1,2);,有了call方法后,f函数中所有的this都指向了obj对象。

call与apply区别

var obj = {
        name : 'hanker'
    };
    function f(a,b){
        console.log(this.name);  //hanker
        console.log(a); //1
        console.log(b); //2
    }
    f.apply(obj,[1,2]);
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

两者区别在于参数的写法不同.上面的代码和小例子的代码作用一样
apply只有两个参数,而call可写多个参数。apply()方法的第一个参数为一个对象,第二个参数为一个数组或类数组对象(由以前的知识可知函数即对象,函数也有自己的方法)。
为什么要同时有 call 和 apply 方法呢?
在js中有一个只存在于函数中的类数组对象arguments.在一些情况下可以直接使用apply()方法

常用实例

<script type="text/javascript">
    /*定义一个人类*/
    function Person(name,age)
    {
        this.name=name;
        this.age=age;
    }
    /*定义一个学生类*/
    function Student(name,age,grade)
    {
        Person.apply(this,arguments);
        this.grade=grade;
    }
    //创建一个学生类
    var student=new Student("qian",21,"一年级");
    //测试
                   alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);
    //name:qian  age:21  grade:一年级
</script>
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

从上面例子看:
1.代码是从new Student(“qian”,21,”一年级”);这一句开始执行的。
2.用new创建了一个新对象student. 同时也调用了函数function Student(name,age,grade)。
3.运行Person.apply(this,arguments); ,可以视作Person(arguments );在apply方法里,其中 this指向了新创建的对象。于是Person函数中的this就指向了student.(arguments就是一个类数组对象)。于是Student就有了Person的属性和方法。

从某些特性来看,这就是js中的继承。

进一步利用

1.利用Math.max求数组中的最大值
Math.max 参数里面不支持Math.max([param1,param2]) 也就是数组。
可以使用

var min = Math.min.apply(null, [10,8,9,7,1]);
console.log(min);
   
  • 1
  • 2
  • 1
  • 2

2.判断数据类型
借用了Object.prototype.toString

var a = [];      
  var b = function(){};
  var c = {};
  var d = null;
  var e = 1;
  console.log( Object.prototype.toString.call(a) );  //[object Array]
  console.log( Object.prototype.toString.call(b) );  //[object Function]
  console.log( Object.prototype.toString.call(c) );  //[object Object]
  console.log( Object.prototype.toString.call(d) );  //[object Null]
  console.log( Object.prototype.toString.call(e) );  //[object Number]
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.实现字符串的翻转

 var str = 'abcdefghijk';
  String.prototype.reverse = function(){
    return Array.prototype.reverse.call(this.split('')).join('');
  }
  console.log( str.reverse() );
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

注意:上面两个运用了原型链的知识。

(function () {('pre.prettyprint code').each(function () { var lines = (this).text().split(′\n′).length;var numbering = $('
    ').addClass('pre-numbering').hide(); (this).addClass(′has−numbering′).parent().append( numbering); for (i = 1; i
    (王道计算机组成原理)第二章数据的表示和运算-第三节:运算方法和运算电路 1(基本运算部件) 本文主要介绍了计算机组成原理中的加法器和算术逻辑单元(ALU)的基本概念与实现原理。首先,文章详细讲解了一位全加器的工作原理,包括其输入输出、逻辑表达式及真值表。接着,介绍了并行加法器的两种类型:串行进位和并行进位的加法器,分析了它们的优缺点。随后,文章探讨了带标志位的加法器,说明了如何通过标志位生成逻辑来判断加法结果的状态。最后,文章阐述了ALU的功能及其实现原理,包括ALU的基本结构、控制信号的作用以及在实际考试中的图示表示。通过这些内容,读者可以全面了解加法器和ALU在计算机中的重要作用及其工作原理。 阅读详情

    相关推荐

    Modbus TCP 通信(C#)

    【代码】Modbus TCP 通信(C#)

    weixin_56229359的博客 1150

    [js] 函数 call()方法和 apply()方法

    js 函数 call()方法和 apply()方法 我们可以将call()和apply()看做是某个对象的方法,通过调用方法的形式来间接调用函数。 如下代码,使用call()方法来调用一个对象的 Object.prototype.toString 方法,用以输出对象的类 Object.prototype.toString.apply({}) // "[object Object]" call()...

    weixin_36210698的博客 444

    LightGBM学习笔记

    LightGB学习笔记1. lightgbm概述1.1 lightgbm介绍1.2 lightgbm和xgboost对比2 .直方图算法及改进2.1 直方图算法2.2 直方图算法改进2.2.1 GOSS算法3.树的生长策略4.系统设计5. 实战 lightgbm是基于boosting的学习框架,使用的是基于决策树的学习算法,具有更快的训练速度、更低的内存使用、更高的正确率、并且能够支持并行化学习,可以用来处理大规模数据,本文主要是针对学习视频https://www.bilibili.com/video/BV

    一一xi的博客 3304

    call和apply的使用-基础篇

    在使用call和apply之前,我们需要先做一些知识储备: 一、window对象 window对象是js中的顶层对象,所有全局变量和全局函数都被绑定在了window对象身上,如何证明呢,我们可以先声明一个全局变量和函数,然后来观察window对象。如代码1-1: var a = 10; //全局变量 function abc(){ //全局函数 console.log("Young"); } console.log(window); //此时

    杨树林er的博客 1467

    深入解析经典蓝牙连接:从HCI命令到LMP协议的完整流程

    本文深入解析经典蓝牙连接的完整流程,从设备发现、寻呼建立物理链路,到安全配对与加密的每一步。通过对照HCI LOG与AIR LOG,详细拆解了HCI命令与LMP协议报文的对应关系,帮助开发者精准定位连接问题,掌握蓝牙调试的核心方法。

    weixin_29260291的博客 449

    华为OD机试真题 新系统 2026-06-10 C++ 实现【设备重排SN】

    通信设备SN一般是包含:字母、数字,用'-'(破折号)进行分组分割,例如:8F-3T-1G-2n是一个有效的SN地址。 现在要对已经存在的SN 按照新的规则进行重排:

    MISAYAONE的博客 129

    深入谈谈apply和call

    深入谈谈apply和call。 这篇文章是本小猿生写的第一篇文章,不喜勿喷,还望大佬批评指教,共同进步,好了废话不多说,下面开始胡扯。 apply和call方法的相同点 apply()和call()方法的作用都是改变this 的指向,也是他们的相同点。 apply和call方法的不同点 apply() 和 call() 方法的区别在于 接收参数的方式不同 apply() 方法,两个参数, 第一个参数是this修改后的指向。 第二个参数是一个数组。 call() 方法, 第一个参数是this修改后的

    小破船借箭的博客 1199

    从 30 天试用到企业级落地,2026 年学习和试用 SAP AI 的完整路线图

    摘要:SAP AI产品体系存在试用版本与商业版本的边界模糊问题,需区分业务嵌入AI(如Joule)、开发者工具(SAP Build Code)和AI基础平台(Generative AI Hub)三个层级。建议学习路径:1)通过SAP Learning专区掌握理论框架;2)优先使用30天Generative AI Hub基础试用体验模型编排;3)结合90天BTP试用账户开发完整应用。特别注意免费计划已陆续停止,需以最新官方文档为准。开发者应重点关注AI如何与SAP技术栈(CAP、Fiori等)集成,而非单纯功

    2007 年 ~ 2025 年,深耕 SAP 技术 18 年 112

    js中的this以及改变this指向的三种方式(call、apply、bind)

    对JS面向对象中的this进行了介绍,更加深入的了解并学会如何使用this。 知其然知其所以然。了解this指向的原理,并知道如何改变this的指向。学会call、apply、bind如何使用以便更好地操纵函数。 希望对大家有所帮助。

    程展威的博客 2168

    【Claude】权限被拒绝 (Permission Denied) 全场景排查 — 已解决

    权限配置是 Claude Code 安全使用的核心机制。通过合理的 allow/deny 规则、正确的通配符使用、子代理独立配置、定期安全审计,可以在保证安全性的同时不影响开发效率。deny 优先:deny 规则优先级高于 allow,先保护敏感资源通配符精确单层匹配,**递归匹配,Bash(cmd*)允许带参数最小权限:只允许必要的操作,避免Bash(*)等危险规则CI 用 skip:Headless 模式用避免挂起子代理独立:每个子代理单独配置权限,不自动继承保护密钥:deny.env。

    一键难忘的博客 3935

    2026年软考高级网络规划设计师第三版备考笔记

    删除了所有已退出主流应用、行业淘汰的技术内容,如 HDLC、xDSL、WiMAX、HSRP/GLBP 等,让教材内容更聚焦当下一线网络工程实际场景,剔除无效考点。

    鹿鸣天涯 1214

    Js apply方法详解,及其apply()方法的妙用

    Js apply方法详解 主要解决一下几个问题: apply和call的区别在哪里 什么情况下用apply,什么情况下用call apply的其他巧妙用法(一般在什么情况下可以使用apply) 首先从网上查到关于apply和call的定义,然后用示例来解释这两个方法的意思和如何去用. apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,ar...

    p_hao的博客 892

    ICML-2025《Learning from Sample Stability for Deep Clustering》

    用于指导深度聚类模型的训练,从而提升模型对困难样本的学习能力,最终改善整体聚类性能。首先,利用K-means在原始样本(非增强)的表征上进行聚类,得到初始聚类分配。其目的是鼓励模型对同一稳定样本在连续epoch中产生相近的表征。输出差异大)会产生更大的损失值,从而引导模型优先优化这些困难样本。此损失借鉴了NT-Xent损失的思想,但将正样本对定义为。最后,通过对比学习优化聚类中心,将同一聚类在。为了获得更具代表性的聚类中心,论文提出。为了学习更鲁棒的表征,模型在在线网络。首先,论文定义了样本。

    Christo的博客 827

    JavaScript中数组的常用方法以及函数对象的方法call()与apply()

    1 arr.forEach()循环 说明: 该方法需要一个函数作为参数(这个函数由我们创建而不由我们调用—回调函数) 数组arr中有几个元素,调用forEach()方法时,就会被执行几次。每次执行时,浏览器就会将遍历得到的元素以形参的形式传递尽量,我们可以定义形参,来读取这些内容 3.浏览器会在回调函数中传三个参数: 第一个参数:就是数组arr中的元素(即被遍历数组的每个元素) 第二个参数:每个元素所对应的索引 第三个参数:就是正在被遍历的数组本身(arr) 2 arr.slice()–提取数组中

    Amelian的博客 1105

    ssm框架搭建

    这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

    android 蓝牙通讯demo

    android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

    js中apply()方法与call()方法详解

    js中apply()方法与call()方法详解     之前见过这两个方法,只是一知半解。今天再次碰见,无奈只好仔细研究一下,通过查看一些资料,总结整理备注如下: 首先,简单分析一下这两个方法: 1.obj.apply([thisObj[,argArray]]):用thisObj对象作当前对象调用obj的方法,继承obj的属性,argArray是方法(或构造方法)的参数数组; 2.

    Mark 1471

    visio安装包

    Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

    Javascript 编程基础(4)函数 | 4.3、apply() 与 call() 方法

    个人技术博客 412

    JavaScript中call()、apply()和bind()方法的详细用法与区别

    JavaScript中call()、apply()和bind()方法的详细用法与区别

    2301_80270696的博客 1738

    JavaScript函数方法apply()与call()的区别

    js中apply()与call()的区别

    遇见更好的自己的博客 341

    javascript的call()方法与apply()方法的理解

    先看一段代码 function cat() { } cat.prototype={ food:'fish', say:function () { console.log('I love '+this.food); } }; var blackCat = new cat(); blackCat.say(); 这时...

    LXX7102的博客 144

    [js学习]apply()方法与call()方法

    Object.call(this,obj1,obj2,obj3) Object.apply(this,arguments) call和apply为 应用函数 如果第一个参数为null的话,this指向全局对象,此时得到的结果恰好如同当调用一个非指定对象时的方法。 当函数是一个对象的方法时,此时不能传递null引用。在这种情况下,这里的对象将成为apply()的第一个参数; 其...

    zzxnevergiveup的博客 231

    JavaScript call() 与 apply() 方法的实现与思路解析

    用一个例子开始 greet = "Hi, Im global"; let foo = { greet: "Hello" }; let bar = function(name, character) { console.log(this.greet); return { greet: this.greet, person: `${name} is ${char...

    Beijiyang 463

    JavaScript 中的 bind()、apply() 和 call()鲜为人知的区别

    大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群每个开发人员都应该充分了解它们的工作原理,并能够辨别它们之间的细微差别。所以你知道,JS 函数是一等公民。这意味着:它们都只是对象值——Function 类的所有实例,具有方法和属性:因此 bind()、apply() 和 call() 是每个 JavaScript 函数都具有的 3 个基本方法...

    程序员成长指北 277

    Javascript中call()方法和apply()方法的作用与区别

    ECMAScript规范所有函数都包含两个非继承的方法,分别为call()和apply(),这两个函数都是在特定的作用域中调用函数,能改变函数的作用域,实际上是改变函数体内“this”的指代的对象。 call(thisObject[,arg1,arg2,arg3...]): 释义:应用某一对象的一个方法,用另一个对象替换当前对象。 ...

    dknl48740的博客 220

    javaScript call()方法与apply方法

    javaScript 中的 call() 是一个奇妙的方法,但也是一个让人迷惑的方法,先看一下官方的解释:call 方法请参阅应用于:Function 对象要求版本 5.5调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[,   [,.argN]]]]])参数thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。 说明call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函

    kingisking1的专栏 536

    javascript apply()与call()方法

    对于apply()与call()方法,先看其定义:apply()语法: functionObject.apply([thisObject,[,argArray]]); 参数 描述 thisObject 可选/Object类型指定执行functionObject函数时,函数内部this指针引用的对象。 argsArray 可选/Array argumens对象调用function

    苦艾文艺 364

    Javascript中call(),apply(),bind()方法、区别与异同

    一 call()方法: call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法. Call() 语法 fun.call(thisArg[, arg1[, arg2[, ...]]]) Call() 参数 thisArg 在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下, 则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时

    ArtLife_的博客 442

    javascript中的call()与apply()方法

    javascript中的call()方法与apply()方法 是函数的内置方法,所有的函数都具有这两个方法。这两个方法是通过函数名来调用的。这两个方法的作用是:传递一个对象作为参数,这个对象来调用这个函数。 下面来看一下call(): 例:有一个函数: [code="javascript"]function test(x,y){ this.x=x; this.y=y;...

    IT人士的平台 97
    上一篇: csdn如何转载别人的文章
    下一篇: $(document)与$(window)的区别
    han_hanker
    博客等级 码龄13年 35粉丝 106原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值