apply 和 call的用法、区别
1、JavaScript中函数是对象的方法,如果一个函数不是js对象的方法那一定是全局对象的函数,每个函数的对象都有apply和call方法,即每个对象都有call and apply
apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:object1.function.apply(object2, arguments);即object2对象应用object1对象的function方法。
call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:object1.function.apply(object2, args1,args2);即object2对象应用object1对象的function方法。
2、共同点
都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”
3、不同点
apply:最多只能有两个参数——新this对象和一个数组。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果不是一个有效的数组或对象,那么将导致一个TypeError。如果没有提供数组和this对象任何一个参数,那么全局对象将被用作thisObj,并且无法被传递任何参数。
call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。 实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。
4、实例
实例1:
let obj1={
name:"iwen",
age:"18",
func:function(){
console.log(`my name is ${this.name} and i'am ${this.age} years old`)
}
}
let obj2={
name:"susan",
age:"19"
}
obj1.func.apply(obj2)//my name is susan and i'am 19 years old
obj1.func.call(obj2)//my name is susan and i'am 19 years old
实例2:
let obj1={
name:"iwen",
age:"18",
func:function(palace,city){
console.log(`my name is ${this.name} and i'am ${this.age} years old and I
want to go to the ${palace} in ${city}`)
}
}
let obj2={
name:"susan",
age:"19"
}
obj1.func.apply(obj2,['Palace Museum','BeiJing'])//my name is susan and i'am 19 years old and I want to go to the Palace Museum in BeiJing
obj1.func.call(obj2,'Palace Museum','BeiJing')//my name is susan and i'am 19 years old and I want to go to the Palace Museum in BeiJing
实例3:什么都不传默认指向全局对象
var name = 'Evan';
var age = 20;
var person = {
name: 'Hillary',
age: 19,
sayIntroduce: function () {
return "Hello, My name is " + this.name + " and I'm " + this.age + ' years old.'
},
sayHobby: function (val1, val2) {
return "I'm " + this.name + ", I like " + val1 + " and " + val2 + ".";
}
}
person.sayIntroduce.call()//Hello, My name is Evan and I'm 20 years old
person.sayIntroduce.apply()//Hello, My name is Evan and I'm 20 years old
apply 和 call的用法、区别的更多相关文章
- apply、call、bind区别、用法
apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向): 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是 ...
- call,apply,bind的用法与区别
1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法? call,apply,bind这 ...
- Bind、Apply、Call三者的区别
1)bind与apply.call 的最大区别就是:bind不会立即调用,其他两个会立即调用 var fn = { _int: function(){return 3}, fun: function( ...
- .apply()用法和call()的区别
Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里 ...
- JS中的apply、call、bind区别
apply.call.bind 用法 1:作用 改变函数运行时的上下文,即改变this的指向问题. xxxFunction.call(this,arg1,arg2,arg3); xxxFunction ...
- order_by_、group_by_、having的用法区别
写于 2012-11-20 22:14 doc文档上. Having 这个是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后 ...
- html中的alt和title用法区别
html中的alt和title用法区别 首先明确一下概念,alt是html标签的属性,而title既是html标签,又是html属性.title标签这个不用多说,网页的标题就是写在<title& ...
- Apply 与 Call 的用法(简化版)
Javascript中Apply 与 Call 的用法,这里只作简单的入门说明 function human( name, age ){ this.name = name; this.age = ag ...
- 转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题
SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UN ...
- OC .(点)与->(箭头)用法区别
这两天同学总是问OC里.和->的用法区别,当时回答的不是很好,周末查了一下,大概清楚了,在这里记录一笔. 先看这个例程 #import <Foundation/Foundation.h&g ...
随机推荐
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的enabled属性
enabled属性非常简单,最开始老猿没准备介绍该属性的,因为大家都应该知道,但仔细看了看官网文章,觉得还是有些细节可能很少有人注意到,因此还是在此介绍一下. enabled属性用于表示部件是否可用, ...
- 第六篇 Scrum 冲刺博客
一.站立式会议 1. 会议照片 2. 工作汇报 团队成员名称 昨日完成的工作 今天计划完成的工作 工作中遇到的困难 陈锐基 - 完成关注/取关功能以及动态绑定- 完成点赞/取消点赞功能以及动态绑定 - ...
- linux服务器性能分析只需1分钟
背景: 现在的互联网公司,大多数时候应用服务都是部署在linux服务器上,那么当你的服务运行过程中出现了一些响应慢,资源瓶颈等疑似性能问题时,给你60秒,如何快速完成初步检测? 肯定有人会说用工具,公 ...
- Python3中zipfile模块文件名乱码问题
inux下zip文件乱码已经是一个常见问题了,再加上python想不遇到乱码问题都难. 在zipfile.ZipFile中获得的filename有中日文则很大可能是乱码,这是因为 在zip标准中,对文 ...
- CSS文本溢出效果&滚动条样式设置
一.文本溢出 1.overflow: hidden; 超出文本会被剪裁隐藏不可见 scroll;超出文本会被剪裁, 显示滚动条 auto; 如果文本超出会显示滚动条,没超出不会显示, overflo ...
- masterha_check_repl --conf=/etc/mha/app1.cnf检查错误
[mysql@node3 ~]$ masterha_check_repl --conf=/etc/mha/app1.cnf Tue Jul 7 22:43:26 2020 - [warning] Gl ...
- HTTPS和HTTP的那些事
随着信息安全变得越来越重要,在浏览器.搜索引擎.CA机构.大型互联网企业的共同促进下,互联网迎来了"HTTPS加密时代".HTTPS在HTTP上建立了SSL加密层,是HTTP协议的 ...
- 一次数独生成及解题算法的剖析(Java实现)
数独生成及解题算法剖析(Java实现) 关键词 数独9x9 数独生成算法 数独解题算法 序言 最近业务在巩固Java基础,编写了一个基于JavaFX的数独小游戏(随后放链接).写到核心部分发现平时玩的 ...
- 移动端 rem和flexible
一.rem布局 rem是相对于根元素的字体大小单位. 假设html的字体大小为16px,那么1rem = 16px; 一旦根元素html定义的font-size变化,整个页面中运用到的rem都会随之变 ...
- 听说特斯拉花了4个月研发出新ERP,然后很多人都疯了
欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 最近这件事儿在SAP圈里炒的挺火的,最主要是因为这几个关键词: 放弃SAP.4个月.自研ERP: 这则新闻一出来,很多人都兴高采烈,都要疯了 ...