Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >call和 apply的区别是什么

call和 apply的区别是什么

作者头像
OECOM
发布于 2020-07-01 09:52:10
发布于 2020-07-01 09:52:10
5930
举报
文章被收录于专栏:OECOMOECOM

2015-07-12 15:02:21

一、方法的定义 call方法: 语法:call(thisObj,Object) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法: 语法:apply(thisObj,[argArray]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

相同点:两个方法产生的作用是完全一样的

不同点:方法传递的参数不同

其实说明白一点,其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。

function Person(name,age) { this.name=name; this.age=age; this.money = 500; }

function myFun(money) { alert(this.money); }

var money = 100; myFun(money); //return 100; //window.myFun(money); save to myFun(money); //这个时候this指向的是window对象,其实myFun函数和定义的var money = 100;都作为window对象子对象(即全局对象)

myFun.apply(window,[]); //save to window.myFun.apply(window,[]); //return 100; //同上

myFun.apply(new Person('zhangsan',23),[]); //return 500, 空数组作为参数,仅符合语法要求 //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500

myFun.call(new Person('zhangsan',23),money,300,'mycardId'); //return 500, 后面money,300和mycardId是参数列表作为参数,一一列出 //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
js中this指向问题及call,apply,bind的区别
在标准函数中,this 指向的是把函数当成方法调用的上下文对象。也就是说在哪里调用的这个函数,那这个this只会指向它外面最靠近它的对象。
潜心专研的小张同学
2023/01/03
1.3K0
js中this指向问题及call,apply,bind的区别
【面试需要】掌握JavaScript中的this,call,apply的原理
掘金 | https://juejin.im/user/5a16e1f3f265da43128096cb
达达前端
2020/02/13
5710
JS中的call()方法和apply()方法和slice()用法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。 2. 相同点:这两个方法的作用是一样的。 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
用户7657330
2020/08/14
9870
JS中的call()方法和apply()方法和slice()用法总结
JavaScript中的this/call/apply/bind
this 关键字在大部分语言中都是一个重要的存在,JS中自然不例外,其表达的意义丰富多样甚至有些复杂,深刻理解this是学习JS、面向对象编程非常重要的一环。
刘亦枫
2020/03/19
5030
JavaScript OOP(二):this关键字以及call、apply、bind
JavaScript的this关键字非常灵活! this 返回的总是对象;即返回属性或方法“当前”所在的对象 1 var o1={ 2 name:'apple', 3 age:100, 4 msg:function(){ 5 return '显示name和age信息:'+'name: '+this.name+', age: '+this.age; 6 } 7 }; 8 //针对msg中的this进行研究: 9 console.log(o1.m
用户1149564
2018/01/11
5770
JavaScript OOP(二):this关键字以及call、apply、bind
JavaScript:prototype&apply&call
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
5600
想起温习一下JS中的this apply call arguments
很多时候讲到语言入门,大家会认为就是要了解一下语言的语法、数据类型和常用函数。这一课对于所有的计算机专业的毕业生来说都可以自学,然而在最近的实践中(带了两个实习生自学js),我发现他们在学习js的时候会被这几个问题困扰:this指向、arguments为什么不是Array、apply的用途及如何实现。写这篇文章是为了减少js新手被这几个问题困扰的时间,希望给js新手一点帮助。 this 指向当前对象,通常在对象的构造函数中使用,用来引用对象。如 function Person(name){     th
用户1183026
2018/01/19
7570
JavaScript深入学习this、call、apply和bind
this的指向问题一直是面试里的常客。也是es5的众坑之一。对于es6而讲,它极大地避免了this带来的错误。但是为了为了维护一些老代码,还是有必要了解this的。
Javanx
2019/09/04
4880
JavaScript深入学习this、call、apply和bind
call,apply,bind 的完全实现和理 解
apply(),call()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是第一个参数。
ZEHAN
2020/09/23
8140
原生javascript实现extend
在extend()函数中没有写死参数,是为了更好的扩展性,永远也不知道需要扩展的对象有几个。 而是通过arguments来获取传进来的参数。
FinGet
2019/06/28
1K0
一文带你了解call、apply、bind的区别及源码实现
call、apply和bind都是JavaScript中Function对象的原型方法,它们的作用主要是改变函数的执行上下文(即this的值)以及传递参数。
用户6297767
2023/12/23
5830
通过自己实现函数 call,apply,bind 来了解他们的原理
我们知道函数中的call,apply,bind都是可以修改函数的this指向。关于函数的this指向问题可以转到Javascript this 指向问题这篇文章。
踏浪
2019/08/22
8320
this,call,apply,bind(万字长文)
前言 大家好啊,我是吒儿?,每天努力一点点?,就能升职加薪?当上总经理出任CEO迎娶白富美走上人生巅峰?,想想还有点小激动呢?。 这是我的第13期文章内容✍,希望能够把每一处知识点,说明白,(当然,如
达达前端
2020/06/16
1.3K0
面试官问:能否模拟实现JS的call和apply方法
之前写过两篇《面试官问:能否模拟实现JS的new操作符》和《面试官问:能否模拟实现JS的bind方法》
lucifer210
2020/02/26
8830
一文搞定this、apply、call、bind
JavaScript中最容易被误解的一个方面是this关键字。看我本篇文章,它们将不会是问题。
用户8921923
2022/10/24
2350
区别和详解:js中call()和apply()的用法
分析: Person.apply(this,arguments); this:在创建对象在这个时候代表的是student arguments:是一个数组,也就是[“zhangsan”,”21”,”一年级”]; 也就是通俗一点讲就是:用student去执行Person这个类里面的内容,在Person这个类里面存在 this.name等之类的语句,这样就将属性创建到了student对象里面
李维亮
2021/07/09
7770
区别和详解:js中call()和apply()的用法
js call方法_recall
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧。
全栈程序员站长
2022/11/01
1K0
call和apply
首先个人感觉call和apply还是挺神奇的,简简单单就改变了this的作用域,下面我们来共同学习一下
用户3159471
2018/09/13
8950
JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
一、闭包(Closure) 1.1、闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9;方法:找到所有的div,
张果
2018/01/04
1.7K0
JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
【THE LAST TIME】this:call、apply、bind
讲道理,这篇文章有些拿捏不好尺度。准确的说,这篇文章讲解的内容基本算是基础的基础了,但是往往这种基础类的文章很难在啰嗦和详细中把持好。文中道不到的地方还望各位评论多多补充指正。
Nealyang
2019/10/18
5780
【THE LAST TIME】this:call、apply、bind
相关推荐
js中this指向问题及call,apply,bind的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档