apply()和call()
2024-10-21 23:01:47
每个函数都包含俩个非继承而来的方法:apply()
和 call()
,这俩个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this
对象的值,以扩充函数赖以运行的作用域。一般来讲,this
总是指向调用某个方法的对象。
比如:
var color="skyblue";
function myColor(){
console.log(this.color); //skyblue
console.log(this); //window
}
window.myColor();
由window
对象调用的 myColor
函数,内部 this
自然指向了window
,this.color
也是window.color
。
一、apply()
这个方法接收2个参数,第一个是在其中运行函数的作用域,第二个是参数数组,其中,第二个参数可以是 Array
构造函数的实例,也可以是 arguments
对象。
例子1:
var fruit="橘子";
var fruitObj={
fruit:"香蕉"
}
function changeFruit(){
console.log(this.fruit);
}
changeFruit.apply(window); //橘子
changeFruit.apply(fruitObj); //香蕉
例子2:
function sum(a,b){
return a+b;
}
function callSum1(a,b){
console.log(sum.apply(this,[a,b])); //传入Array的实例
}
function callSum2(a,b){
console.log(sum.apply(this,arguments)); //传入arguments对象
}
callSum1(10,20); //
callSum2(10,20); //
例子3:
function SuperType(fruit){
this.fruit=fruit;
this.getSuperValue=function(){
console.log(this.fruit);
}
}
function SubType(fruit){
SuperType.apply(this,arguments); //橘子
}
var instance=new SubType("橘子");
instance.getSuperValue();
二、call()
call()
方法的用法和作用与 apply()
一样,只是再填入第二参数时,必须一一列举出来。
例子1:
function sum(a,b){
return a+b;
}
function callSum(a,b){
console.log(sum.call(this,a,b));
}
callSum(10,20); //
例子2:
function SuperType(fruit){
this.fruit=fruit;
this.getSuperValue=function(){
console.log(this.fruit);
}
}
function SubType(fruit){
SuperType.call(this,fruit); //橘子
}
var instance=new SubType("橘子");
instance.getSuperValue();
总结:使用apply()
还是call()
,完全取决于你采用哪种给函数传递参数的方式最方便。如果你打算直接传入arguments
对象,或者包含函数中先接收到的也是一个数组,那么使用apply()
肯定最方便,否则,使用call()
可能更方便。(在不给函数传递参数的情况下,使用哪个方法都无所谓。)
最新文章
- 工作总结_JS_1
- 流的文件操作(File)
- Guava----Function
- (原创)VM中的CentOS6.4中安装CloudStack6.3①
- spring 定时器Quartz
- 记一次惨痛的线上bug
- lamp环境编译(apache2.4.7 php5.4.25 mysql 5.5.23)
- 私有云Mariadb集群搭建
- asp中的动态数组
- 一句python,一句R︱模块导入与查看、数据读写出入、数据查看函数、数据类型、遍历文件
- 【spring源码分析】IOC容器初始化(四)
- 好的RESTful API的设计原则
- 【bzoj4818】 Sdoi2017—序列计数
- oracle servicename 与SID的区别
- Huawei DHCP 全局配置与接口配置
- linux 删除指定日期之前的文件
- thinkphp3返回json或jsonp数据
- ST-PUZZLE-2.0(一个益智游戏)
- Balanced and stabilized quicksort method
- CentOS 6.9下iptables通过raw表实现日志输出和调试
热门文章
- Java——equals方法---18.10.18
- jsp中的input
- Spring MVC: 环境搭建并实现简易的HelloWorld
- 50道基础的java面试题
- 问题:docker pull 用户登陆tricky,Error response from daemon: unauthorized: incorrect username or password
- Pc移植到Mac的技术细节
- CCF-NOIP-2018 提高组(复赛) 模拟试题(七)
- Web负载均衡技术
- Leetcode 673.最长递增子序列的个数
- MVC项目用Windsor注入