Js中apply()和call()方法
来源:互联网 发布:关于网络管理的书 编辑:程序博客网 时间:2024/05/16 01:09
在学习JS函数时,apply和call这里不是很明白,查了几个帖子总结了一下,做了如下笔记。
以下主要介绍这三个问题:
1.apply和call方法的作用是什么?
2.apply和call有什么区别?
3.apply和call分别在什么情况下使用?
0.apply和call方法的定义
apply():方法能劫持另外一个对象的方法,继承另外一个对象的属性.
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function
call():和apply的意思一样,只不过是参数列表不一样.
看一个apply的例子:
<script> function Person(name,age){ this.name = name; this.age = age; } function Student(name,age,grade){ Person.apply(this,arguments); this.grade = grade; } var student = new Student("zll",12,"Grade6"); alert(student.name+","+student.age+","+student.grade);//结果为zll,12,Grade6</script>结果为:zll,12,Grade6
Student类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处
分析:
Person.apply(this,arguments);
this:在创建对象时代表的是student
arguments:是一个数组,也就是[“zll”,”12”,”Grade6”];
通俗一点讲就是:
用student去执行Person这个类里面的内容,在Person这个类里面存在this.name等语句,这样就将属性创建到了student对象里面 。
当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。
1.apply和call方法的作用
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。
关于“改变函数体内部 this 的指向”,来看以下代码:
<script> function add(a, b){ console.dir(this); } function sub(a, b){ console.dir(this); } add(1,2);//"Window" sub(1,2);//"Window" add.apply(sub, [1, 2]);//"sub(a, b)" sub.apply(add, [1, 2]);//"add(a, b)"</script>
二者的作用完全一样,只是接受参数的方式不太一样。
apply()方法接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组。参数数组可以是Array的实例或是arguments对象。
对于call()方法而言,第一个参数this值没有变化,传递给函数的参数必须逐个列举出来。
看下面代码:
function sum(num1,num2){ return num1 + num2; } function callSum1(num1,num2){ return sum.apply(this,arguments);//参数为arguments对象 } function callSum2(num1,num2){ return sum.apply(this,[num1,num2]);//参数[num1,num2]为Array的实例 } function callSum3(num1,num2){ return sum.call(this,num1,num2);//参数num1,num2逐个列举出来 }
3.apply和call分别在什么情况下使用?
使用apply()还是call(),完全取决于给函数传递参数的方式。参数是明确知道数量时,用 call(),而不确定的时候,用 apply()。
本文参考:Js高级程序设计
博客:http://blog.csdn.net/business122/article/details/8000676
知乎赵望野和杨佰的回答:https://www.zhihu.com/question/20289071
- JS中call和apply方法
- JS中call()和apply方法
- Js中apply()和call()方法
- JS中call和apply方法
- js中apply和call
- Js中apply和call
- JS中call和apply
- js中call和apply
- js中call和apply
- js 中apply方法和call方法的详解
- Js语言中Call方法和Apply方法
- 【js】javascript中call()和apply()方法的区别
- JS中call和apply方法的区别
- js中apply和call方法的应用
- js apply和js call方法详解
- js apply和js call方法详解
- js apply和js call方法详解
- JS中的apply方法和call方法
- opencv-python眼睛识别
- STUN/TURN/ICE协议在P2P SIP中的应用(二)
- 协同过滤
- debian8.7搭建LAMP
- ionic添加cordova插件-BarcodeScanner
- Js中apply()和call()方法
- java实现图片与base64字符串之间的转换
- Windows系统下Apache、PHP无法启动问题总结
- FastCgi 与 PHP-FPM 之间的区别
- 让一个Android应用一直运行在后台,不容易被杀死
- CS143-project1 图像过滤与图像混合Image Filtering and Hybrid Images
- 记录下载镜像的网站
- 微信小程序开发详解(八)---微信小程序页面生命周期和参数传递
- I2C协议