JavaScript之call()和apply()

每一javascript function默认都有一些附带的method,如:Function.call(), Function.apply();这两个方法的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别:

apply(thisArg,argArray);
call(thisArg[,arg1,arg2…] ]);

即所有函数内部的this指针都会被赋值为thisArg,这可实现将函数作为另外一个对象的方法运行的目的

1、call()method

通过两个实例说明call()的用法

示例一:

var x = 10;
var o = { x: 15 };

function f() {
    alert(this.x);
}

f();  //输出10
f.call(o);  //输出15

f() : 直接调用f, 而非通过对象实例的引用进行调用, 此时function f(){}中的this指向的是全局对象,示例中的第一行代码定义了一个全局变量x,因此,此时的this.x即返回全局变量x的值

f.call(o) : 通过Function.call()调用f,并传递了一个全局对象o做为参数,此时function f(){}中的this指向的是call方法传入的第一个参数o,因此,此时的this.x返回的就是对象o中的x属性对应的值

示例二:

var x = 10;
var o = { x: 15 };
function f(message) {
    alert(message);
    alert(this.x);
}

f("invoking f");
f.call(o, "invoking f via call");

该示例主要演示了通过call()传递参数到目标函数,根据该方法的定义,也可以传递多个参数

 

知识点:

理解在运行时,function f()中this关键字指向或引用的对象,只有在function f()执行时才能确定

 

2、apply()method

apply()方法和call()方法类似,区别就在于通过apply()传递参数(第二个参数)时,要求参数必须是数组类型

同样通过两个实例说明apply()的用法

示例一:

var x = 10;
var o = { x: 15 };
function f(message, a) {
    alert(message);
	alert(a);
    alert(this.x);
}

f("invoking f");//输出结果 : "invoking f", "undefined", 10
f.apply(o, ["argFirst","argSecond"]);//输出结果 : "argFirst",  "argSecond",  15

 该示例主要演示了apply()和call()的区别,主要最后一行代码apply()方法中的第二个参数是数组类型,目标函数f()在接收参数时,第一个参数对应数组中的第一个元素,第二个参数对应数组中的第二个元素,以此类推

示例二:

var o = { x: 15 };

function f(message1, message2)
{
    alert(message1 + (this.x * this.x) + message2);
}

function g(object, func)
{           
    // arguments[0] == object
    // arguments[1] == func
    
    var args = []; // empty array
    // copy all other arguments we want to "pass through" 
    for(var i = 2; i < arguments.length; i++)
    {
        args.push(arguments[i]);
    }

    func.apply(object, args);
}

g(o, f, "The value of x squared = ", ". Wow!");

该示例主要演示了利用apply()要求参数必须是数组的特性,和arguments对象结合编写出灵活优雅的代码

注意: arguments对象并不是数组类型,因此,在for循环中对arguments对象进行了转换

 

好了,到此call()和apply()两个方法的应用就介绍到此,以上理解主要参考http://odetocode.com/Blogs/scott/archive/2007/07/05/function-apply-and-function-call-in-javascript.aspx 后个人进行的总结和记录,以帮助理解,在此向作者表示感谢!

LinePhone3.2.7(android端最新版本) sip客户端 SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/ 立即下载

相关推荐

AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解

是一个复杂但核心的动画管理器。它利用 Android 的远程动画机制,拦截系统默认的窗口切换,并替换为高度定制、与 Launcher UI 深度集成的平滑过渡动画。当用户从一个应用程序通过手势或按键返回到 Launcher (桌面) 时,它负责创建和运行动画,使得应用程序窗口能够平滑地过渡(通常是缩小)到 Launcher 上的对应目标(图标、小部件或屏幕中心),同时 Launcher 界面元素(工作区、背景等)恢复显示。计算动画所需的各种参数,如窗口的起始/结束位置、缩放比例、透明度、圆角、裁剪区域等。

Micheal_Yang's Blog 2666

Js中的Call()和apply()方法

call和apply都是Function对象的原型方法,它们是把特定的函数当作一个方法绑定到指定的对象上进行调用。apply和call的方法和功能用法相同,区别是他们传递的参数的方式不同,其中apply()是用数组的方式进行传递参数,call方法则用数值的方式进行传递参数。而且call()方法只能接受多个参数列表,apply()方法只能接收数组或者伪类数组,数组元素将作为参数传递给被调用的函数。c...

qq_42276997的博客 3439

SystemVerilog新手实战指南:iverilog与VScode的完美组合

本文为SystemVerilog新手提供了一套高效入门方案,详细介绍了如何利用开源编译器iverilog与轻量编辑器VScode搭建学习环境。内容涵盖十分钟快速安装配置、首个工程从编码到查看波形的完整流程,并演示了动态数组和队列等SystemVerilog新特性的使用,旨在帮助初学者避开复杂商业工具,快速掌握数字电路设计与验证的核心技能。

f6g7h8i9j的博客 513

call()与apply()的作用与区别

每个函数都包含两个非继承而来的方法:apply()和call()。; call与apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性; 作用 call()方法和apply()方法的作用相同:改变this指向。 区别 他们的区别在于接收参数的方式不同: call():第一个参数是this值没有变化,变化的是其余参数都直接...

mandy' blog 3万+

WebUI自动化测试框架搭建(python+pytest+selenium+allure)

将鼠标移动到要定位的元素上面>右键>点击“检查”>在元素代码上右键>复制>复制XPath。

m0_63729339的博客 1280

从Bit到MCS:深度解析Xilinx FPGA程序固化流程与文件选型

本文深度解析Xilinx FPGA程序从调试到量产的固化流程,重点对比BIT、BIN、MCS和ELF四种文件格式的特性与适用场景。针对工业级应用,详细讲解MCS文件的生成优化、Flash烧录避坑指南及三级验证流程,并分享多镜像管理、加密安全等高级技巧,帮助开发者提升FPGA量产可靠性。

weixin_30924239的博客 322

改变this指向---call(),apply()

1、调用函数 fn.call(); 2、改变this指向 call(thisArg,x1,x2) thisArg this要指向谁 x1,x2传递的参数(可选,没有就不写) 调用fn函数,并且把this指向o function fn(x, y) { console.log('我想喝手磨咖啡'); console.log(this); console.log(x + y); } ...

weixin_48340600的博客 256

深入排查127.0.0.1拒绝连接:从端口占用到Tomcat服务启动的完整解决方案

本文针对开发者访问127.0.0.1时遭遇“拒绝连接”的常见问题,提供了一套完整的排查与解决方案。文章从端口占用检查入手,详细讲解了使用netstat命令识别进程,并深入分析了服务监听地址、IPv6配置、防火墙以及Tomcat服务安装与启动等核心环节。通过实战演练,指导读者系统性地解决从网络层到应用层的各类连接问题,最终确保本地服务成功运行并可通过本地回环地址正常访问。

weixin_29279047的博客 3180

javascript 中关于call方法的详解。

     关于javascript中的call方法,网上查了一些资料总是不得详解。总结网上的观点,call有两个妙用:                      1: 继承。(不太喜欢这种继承方式。)                      2: 修改函数运行时的this指针。      js中关于call的解释如下:                                       ...

bobo553443的博客 1895

FastAPI 高级特性:同异步路由函数、依赖注入与后台任务

在现代 Web 开发中,高效的性能和简洁的代码结构是至关重要的。FastAPI 作为一个现代、快速(高性能)的 Web 框架,凭借其对异步编程的原生支持和直观的依赖注入系统,迅速成为开发者的热门选择。在本文中,将深入探讨 `FastAPI` 中的几个核心概念:同异步函数的区别、`Depends` 依赖以及后台任务。

qq_43629857的博客 203

C# 调用高德地图关键词 API

今天我们要一起探索如何使用 C# 来调用高德地图的关键词搜索 API,从而实现精准的地理位置搜索功能。高德地图的关键词搜索 API 可以帮助我们轻松地实现这一点,它能够返回一系列匹配关键词的地点坐标和其他相关信息。通过简单的几行 C# 代码,我们就实现了调用高德地图关键词搜索 API 的功能。接下来,我们将在一个 C# 控制台应用中实现调用高德地图关键词搜索 API 的功能。此外,如果要在生产环境中使用,还需要考虑安全性问题,例如不要在客户端暴露 API 密钥。🔥关注墨瑾轩,带你探索编程的奥秘!

java专栏 1102

js中call()和apply()的区别和用法

1.理解 this关键字: 面向对象语言中 this 表示当前对象的一个引用。但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。 在方法中,this 表示该方法所属的对象;如果单独使用,this 表示全局对象;在函数中,this 表示全局对象;在函数中,在严格模式下,this 是未定义的(undefined);在事件中,this 表示接收事件的元素。 类似 call() 和 apply() 方法可以将 this 引用到任何对象。 apply 和 call 允许切换函数执

weixin_44185143的博客 1530

SAP UI5 主题设置全解析:从启动参数到运行时切换、跨域白名单与事件监听

SAP UI5主题体系深度解析:从配置到切换的完整指南 摘要:SAP UI5主题机制远不止CSS换肤,其工程化实践涵盖启动配置、运行时API切换、跨库路径映射及安全管控等关键环节。通过bootstrap标签或URL参数设置初始主题,运行时可用Theming.setTheme无刷新切换。自定义主题需配置theme-roots路径,跨域加载需声明sap-allowed-theme-origins白名单。主题切换完成后会触发applied事件,适合执行视觉同步操作。该体系支持多品牌适配、集中式主题管理,在Fior

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

浅谈JS中call()和apply()的区别和用途?

在JavaScript中,this指向问题一直是一个老生常谈的问题。很多小伙伴应该都知道在js中,this指向哪里通常是在函数调用的时候才确定的,简单来说就是谁调用了函数则this指向谁,当然,这只是狭义的,更加详细的介绍大家可以去看《你不知道的Javascript》这本书。call()和apply()这两个方法的作用可以简单归纳为改变this指向,从而让我们的this指向不在是谁调用了函数就指向谁。

u010227042的博客 1859

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaScript中apply()和call()的区别和应用

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。需要完整面试题的朋友可以点击蓝色字体免费获取[外链图片转存中…(img-l55QpLiX-1713501157236)][外链图片转存中…(img-PChvwIXd-1713501157236)][外链图片转存中…(img-XX0aF1jI-1713501157236)][外链图片转存中…(img-eUqFs9wF-1713501157236)]

2301_78145364的博客 1167

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

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

轻松拿下JavaScript(四)——对象字面量,this,call()和apply()方法,JS的异常处理

我们今天这讲主要讲解JavaScript的面向对象的几个内容:对象字面量,this,this,call()和apply()方法,Js的异常处理。 对象字面量: 1、我们之前看到的例子都是使用点标识符创建对象和成员的。比如: var temp=document.getElementById('example'); 我们使用了点来获取document这个对象的getEl

陈宗毅 技术在于分享 1万+

js 中call()和apply()

我们使用call()和apply()方法调用greet()函数,并将person1和person2作为上下文对象传递给函数,同时传递一个字符串作为参数。注意,call()和apply()方法只是改变了函数的上下文,而不会改变函数本身。apply()方法与call()方法类似,但是它接受一个数组作为参数,而不是一系列的参数。在JavaScript中,call()和apply()都是用来调用函数的方法,它们的作用是改变函数的上下文(也就是this的指向)。// 使用call()方法调用函数。

2302_80798583的博客 327

JS之apply()和call()的区别

一直没怎么去深入了解js的apply()和call()的知识,最近空闲就在做demo,总结了一些: - 相同特点 1. apply()和call()都是用于改变this指向,也就是改变作用对象。 2. 调用的函数立即执行。 - 不同点 apply(obj,array)只能接受两个参数,一个是改变指向的对象,另一个是要传递的参数的数组;而call(obj,a,b,c,..)可以接受很多个参数,第一个...

sxjit的博客 235

JavaScript进阶:JS中的call()、apply()和bind方法

call()、apply()和bind方法 1、call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供

cho_jun的博客 523

JS中的call()方法和apply()方法用法总结

JacvaScript中的call()方法和apply()方法, 1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。 2. 相同点:这两个方法的作用是一样的。都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。

Hei, Welcome To vickie's Blog,Good Good Study, Day Day Up ~ 18万+

javascript当中call()和apply()用法

13)call()和apply()马克-to-win:call是在特定的作用域中调用函数。例 3.13.1<html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title> </title> <sc...

mark_to_win的专栏 113

js/javascript函数中的apply()和call()

在ES中,函数也是是对象的一种,每个函数都包含两个属性:length和prototype,且每个函数包含两个非继承而来的方法apply()和call()。这两个方法都...

QUX轻博客 149

JavaScript 中 apply() 和 call() 方法的区别

构成函数主体的JavaScript 代码在定义之时并不会执行, 只有调用该函数时, 他们才会执行。有四种方法来调用JavaScript 函数: 作为函数 作为方法 作为构造函数 通过他们的 call() 和 apply()方法间接调用 在这里简单总结一下 call() 和 apply() 方法的应用。 描述 apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.app...

许建桐的技术博客 243

JavaScript中apply()和call()的异同点

每个函数都包含两个非继承而来的方法,apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。        apply()方法接收两个参数:一个是在其中运行的作用域,另一个是参数数组。其中,第二个 参数可以是Array的实例,也可以是arguments对象。例如: function sum(num1,num2){          

u012491775的专栏 1420

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

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

程序员成长指北 277
上一篇: jQuery end()方法解释
下一篇: javascript之prototype、__proto__和constructor
javaRwx
博客等级 码龄20年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值