首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

javascript中的.call是如何工作的?

在JavaScript中,.call()是一个函数方法,用于调用一个函数并指定函数内部的this值和参数列表。它的工作原理如下:

  1. .call()方法是通过函数对象调用的,因此需要先获取要调用的函数对象。
  2. 使用.call()方法时,需要在函数对象后面使用点号(.)来调用该方法。
  3. .call()方法的括号中,第一个参数是要设置为函数内部的this值的对象。这个参数是可选的,如果不传入参数,默认为undefined
  4. 之后的参数是要传递给函数的参数列表。这些参数也是可选的,如果函数不需要参数,则可以省略。
  5. 当调用.call()方法时,会立即执行函数,并将指定的this值和参数传递给函数。
  6. 函数执行完毕后,.call()方法会返回函数的执行结果。

.call()方法的优势在于可以动态地改变函数内部的this值,并且可以传递任意数量的参数。这使得我们可以在不改变原函数定义的情况下,灵活地调整函数的执行环境和参数。

应用场景:

  • 改变函数内部的this值:通过.call()方法,可以将一个对象作为函数的上下文,使函数内部的this指向该对象。
  • 继承:.call()方法可以在一个构造函数中调用另一个构造函数,并且将当前对象作为参数传递给另一个构造函数,实现继承的效果。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript 如何工作🔥 🤖

JavaScript 世界上最受欢迎和最讨厌语言之一。它被爱,因为它是有效。您只需学习 JavaScript 即可制作全栈应用程序。...它也被讨厌,因为它以出乎意料和令人不安方式行事,如果您不投入理解该语言,可能会让您讨厌它。 这篇博客将解释 JavaScript 如何在浏览器执行代码,我们将通过动画 gif 来学习它。...然后我们将a和b值相加并将其存储在sum变量。 让我们看看 JavaScript如何在浏览器执行代码 浏览器创建一个具有两个组件全局执行上下文,即内存和代码组件。...JavaScript 函数与其他编程语言相比,工作方式有所不同。...当我们将函数嵌套在函数时,执行上下文会变得复杂。 JavaScriptCall Stack 帮助下管理代码执行上下文创建和删除。

2.5K10

JavaScript如何工作?

原文作者:Ganesh Jaiwal 地址:https://dev.to/ganeshjaiwal/how-does-javascript-work-45oc 您是否知道简单 JavaScript 语句需要大量工作才能完成...所以浏览器无法直接理解 javascript。 那我们该如何要求浏览器做些什么呢? 让我们从浏览器理解语言开始。 浏览器仅理解 0 和 1,即二进制/位格式语句。...那么,一次只允许一项任务时,该如何工作? 这是Web API和回调队列。...由于 Web API 特定于浏览器,因此它们可能因浏览器而异。在某些情况下,某些 Web API 可能存在于一个浏览器,而没有出现在另一浏览器。...// First // Third // Second 这只是 JavaScript 引擎工作原理概述。 分享,收藏,点赞,在看支持作者

2.7K31

JavaScript Call 和 Apply

当调用一个函数时,JavaScript解释器并不会计较形参和实参在数量、类型以及顺序上区别,JavaScript参数在内部就是用一个数组来表示,从这个意义上来说,apply比call使用率更高...call包装在apply上面的一颗语法糖,如果我们明确地知道函数接受多少个参数,而且想一目了然表达形参和实参对应关系,那么也可以用call来传递参数。...在实际开发,经常会遇到this指向被不经意改变场景,比如有一个div节点,div节点onclick事件this本来指向这个div。 ?...这个时候我们可以用call来修正func函数指向this,使其依然指向div。 ? 另外在本博客"JavaScriptthis理解"也用apply来修正this,代码如下: ? (2)....那么这种机制内部实现原理是什么呢?以Array.prototype.push为例,看看V8引擎如何实现。 ?

57810

【译】JavaScriptcall,apply,bind

在我们开始研究call, apply, bind之前,应该对how does "this" keyword works in JavaScript有所认知。...console.log(this) } } student.getDetails(); // {name: "ritik", getDetails: f} 复制代码 所以,那就是"this"如何通过作用域自动地获取它上下文..."call"和"apply"达到效果一样,但是,它们处理参数方式不同。 现在,我们传递一些参数给getDetails函数。...现在,如果你想在代码很多地方使用带不同参数"getDetails"函数。 多次使用"call"和"apply"一种解决方法,但是"bind"函数可以让这个过程更加容易。..."bind"方法创造了一个指向传入对象"this"引用,这和"apply"或者"call"那样,但是其返回一个函数。 现在,在你代码,这个函数通过不同参数被多次使用。

56120

JavaScript call()、apply()、bind() 用法

obj.objAge; // 17 比较一下这两者 this 差别,第一个打印里面的 this 指向 obj,第二个全局声明 shows() 函数 this window ; 1,call()...由此得出结论,bind 返回一个新函数,你必须调用它才会被执行。 2,对比call 、bind 、 apply 传参情况下 ?...从上面四个结果不难看出: call 、bind 、 apply 这三个函数第一个参数都是 this 指向对象,第二个参数差别就来了: call 参数直接放进去,第二第三第 n 个参数全都用逗号分隔...,直接放到后面 obj.myFun.call(db,'成都', ......bind 除了返回函数以外,它 参数和 call 一样。 当然,三者参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

81630

函数表达式在JavaScript如何工作

JavaScript,函数表达式一种将函数赋值给变量方法。函数表达式可以出现在代码任何位置,而不仅仅是函数声明可以出现位置。...函数表达式语法如下: var myFunction = function() { // 函数体 }; 上述代码,将一个匿名函数赋值给变量myFunction。...函数表达式工作方式如下: 1:变量声明:使用var、let或const关键字声明一个变量,例如myFunction。 2:函数赋值:将一个函数赋值给该变量。函数可以是匿名函数,也可以是具名函数。...这样函数在函数内部和外部都可以通过函数名来调用自身。...函数声明会被提升到作用域顶部,而函数表达式不会被提升。因此,在使用函数表达式之前,需要确保该表达式已经被赋值。此外,函数表达式还可以根据需要在运行时动态创建函数,具有更大灵活性。

17950

JavaScript call()、apply()、bind() 用法

JavaScript call、apply 和 bind Function 对象自带三个方法,这三个方法主要作用是改变函数调用过程 this 指向 1 apply Function.apply...call方法接收两个参数 obj:这个对象将代替Function类里this对象 args:这个一个参数列表 不带第一个参数 var person = { fullName: function...(person1, "Seattle", "USA"); 3 bind Function.bind(obj[,params...]) bindES5 新增一个方法,它传参和call类似,也是接收两个参数...(person1, "Seattle", "USA")(); 可以从上面看出,使用方法基本和call一致,只是后面多了(),其实是bind不会立即执行对应函数,只是返回对函数引用。...那为什么要引入bind呢,是因为call和apply会自动执行目标函数,从而无法绑定在事件上,因为事件我们手动触发,而bind不会自动执行目标函数。

7571211

JavaScript 如何工作JavaScript 共享传递和按值传递

按值传参 在 JavaScript ,原始类型数据按值传参;对象类型跟Java一样,拷贝了原来对象一份引用,对这个引用进行操作。...可以参考博文 JavaScript Fundamentals (2) – Is JS call-by-value or call-by-reference?...在这里,变量 corn 和 lion 值在执行期间存储在堆栈。 堆:分配 JavaScript 引用数据类型(如对象)地方。 与堆栈不同,内存分配随机放置,没有 LIFO策略。...JS 引擎代码生成器在最终生成机器码之前,首先是将 js 代码编译为汇编代码。 为了了解实际发生了什么,以及在函数调用期间如何将激活记录推入堆栈,我们必须了解程序如何用汇编表示。...为了跟踪函数调用期间参数如何在 JS 传递,我们将例子一代码使用汇编语言表示并跟踪其执行流程。

3.7K41

Java注解如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。...事实上,@Override告诉编译器这个方法一个重写方法(描述方法元数据),如果父类不存在该方法,编译器便会报错,提示该方法没有重写父类方法。...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...信息 @Inherited – 定义该注释和子类关系 那么,注解内部到底如何定义呢?

1.7K21

Java注解如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...我们来看两个例子:一个标准注解@Override,另一个用户自定义注解@Todo。 ? 对于@Override注释你可能有些疑问,它什么都没做,那它是如何检查在父类中有一个同名函数呢。...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...信息 @Inherited – 定义该注释和子类关系 那么,注解内部到底如何定义呢?

1.5K30

Java注解如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...信息 @Inherited – 定义该注释和子类关系 那么,注解内部到底如何定义呢?...在最新servlet3.0引入了很多新注解,尤其和servlet安全相关注解。

1.7K10

浅谈JavaScriptapply,call和bind

call call() 与 apply() 类似,区别在于 apply() 第二个参数为数组,而 call() 把参数跟在第一个参数后面,并且可以跟多个参数。...而 Array.prototype.slice.call(arguments) 可以理解为把 slice 对象指向 arguments ,从而让 arguments 可以使用 slice 方法。...不过 bind() 所提供预设参数功能与此不同。 在我们印象, list3 应该输出 [1, 2, 3] 但实际输出却是 [37, 1, 2, 3]。...总结 apply() call() bind() 三者区别不大,都是用来改变函数 this 指向。 apply() 把 this 所需参数放入一个数组,作为 apply() 第二个参数传入。...bind() 返回对应函数,便于稍后调用,而 apply()、call()则立即调用 由于其特性,使用起来千奇百怪,有各种各样有趣用法,还等待我们去挖掘。

53530

理解JavaScriptThis,Bind,Call和Apply

this关键词在JavaScript个很重要概念,也是一个对初学者和学习其他语言的人来说晦涩难懂。在JavaScript,this一个对象引用。...在这篇文章,你将学习到基于上下文隐式表示含义,并将学习如何使用bind,call和apply方法来显示确定this值。...在ECMAScript 2015更新为JavaScript引入类语法之前,构造函数初始化用户定义对象标准方法。...总结 在这篇文章,你学到了关于JavaScriptthis,和基于隐式运行时绑定可能具有的不同值,以及通过bind,call和apply显示绑定。...你还了解到了如何使用箭头函数缺少this绑定来指向不同上下文。有了这些知识,你应该能够在你程序明确this价值了。

32240

JavaScript如何工作:存储引擎+如何选择合适存储API

浏览器数据持久化 现在,有相当多浏览器 Api 用来存储数据。这里将逐一介绍其中一些及它们区别,以便后续我们能够容合理选择使用。 然而,在选择如何持久化数据之前,有几件事需要考虑。...当然,有必要知道第一件事 Web 应用程序应用场景是什么,以及以后如何迭代和丰富。即使你知道了这些,最终也会有几个选择。...IndexedDB 一种在用户浏览器持久存储数据方法。因为它允许你创建具有丰富查询功能 Web 应用程序,无论网络可用性如何,这些应用程序都可以在线和离线工作。...IndexedDB 对于存储大量数据应用程序(例如,借出库 DVD 目录)和不需要持久 internet 连接才能工作应用程序(例如,邮件客户机、待办事项列表和记事本)非常有用。...要存储应用程序状态和用户生成内容,请使用IndexedDB。这使得用户可以在更多浏览器离线工作,而不仅仅是那些支持缓存API浏览器。

1.6K10

React浅比较如何工作

但通常只是一个比较简单解释。所以,本文将研究浅比较概念,它到底是什么、如何工作,并会得到一些我们可能不知道结论 深入浅比较实现 最直接了解浅比较方式就是去深入它实现。...hasOwnProperty.call(objB, currentKey) || !...如果其中一个参数原始值,前面的比较仍然会漏掉这种情况 为了确保我们下面比较两个复杂数据结构,我们还需要检查是否其中一个参数不是对象或者null。...hasOwnProperty.call(objB, currentKey) || !...+0和-0在浅比较不相等。并且NaN和NaN也认为不相等。这也适用于复杂结构内部比较 虽然两个直接创建对象(或数组)通过浅比较相等({}和[]),但嵌套数组、对象是不相等

2.9K10

KerasEmbedding层如何工作

在学习过程遇到了这个问题,同时也看到了SO中有相同问题。而keras-github这个问题也挺有意思,记录一下。...这个解释很不错,假如现在有这么两句话 Hope to see you soon Nice to see you again 在神经网络,我们将这个作为输入,一般就会将每个单词用一个正整数代替,这样,上面的两句话在输入这样...[0, 1, 2, 3, 4] [5, 1, 2, 3, 6] 在神经网络,第一层 Embedding(7, 2, input_length=5) 其中,第一个参数input_dim,上面的值...7,代表单词表长度;第二个参数output_dim,上面的值2,代表输出后向量长度为2;第三个参数input_length,上面的值5,代表输入序列长度。...vector就是下面这个: [[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]] 原理上,从keras那个issue可以看到,在执行过程实际上查表

1.3K40

「译文」Prometheus relabel 如何工作

Prometheus labels 标签 (Label) 一组键值对,允许我们描述和组织 Prometheus 指标实际测量内容。...我们可以使用这些特殊标签一些 Description 那么现在我们明白了各种 relabel_config 规则输入是什么,我们如何创建一个 relabel 配置?它们到底能用来做什么?...webserver01/kata sqldatabase/kata 替换默认值 $1,所以它将匹配重合词第一个捕获组,如果没有指定重合词,则匹配整个提取值。...它们如何在我们日常工作帮助我们? 有七个可供选择行动,让我们仔细看看。....*)" replacement: "k8s_${1}" Prometheus 重新标记常见用例 下面一个关于重新标记常见用例小清单,以及在什么地方适合添加重新标记步骤: •当你想忽略一个子集应用程序时

6.2K20

【面试需要】掌握JavaScriptthis,call,apply原理

this,call,apply,因为面试官会问啊!...那么this是什么,Function.prototype.call和 Function.prototype.apply这两个方法又是如何使用在JavaScript呢。...学习掌握this必须,我们常常在编写JavaScript代码时,会常用到它。...call方法参数,如果不传,或是null,undefined情况下,函数this指向就是指window对象,如果传递另一个函数函数名,函数this指向就是这个函数引用,如果参数传递基本类型数据时...在JavaScriptcall和apply作用是一样 为了改变某个函数运行时上下文(context)而存在,就是为了改变函数体内部this指向。

49910
领券