Call与Apply

1、前言

ECMAscript中提供了两个方法(call,apply)用于改变对象内部的this指针,它们两个的作用都是一样的,但是传递的参数有点不大相同。

它们的大概语法为:

call(this, arg1, arg2, arg3, …..)

apply(this, arguments);

它们第一个参数都是需要改变指针的对象,之后的参数是传递给在调用call方法的函数需要的参数。

call之后的需要传递多少参数就传递多少参数,而apply传递的是一个参数数组,它们两个有什么不一样?call是在明确知道参数有多少个的情况下使用,而apply是相对于不清楚有多少个参数的时候使用的。

2、它们有什么作用?

比如在很多情况下,操作DOM返回的NodeList类型的值是一个类数组,相当于有数组的基本特征但是没有数组的很多方法,所以这个时候就需要用call方法调用Array数组类型的一些方法。

具体这这两个方法有什么用?还是实例来说明吧!

 var a = {

 value: 10

 };

 var b = {

 setValue: function(num){

 this.value = this.value + num;

 }

 }

 b.setValue.call(a, 20); <<执行过后,a.value等于30;

其实不难看出上例中,call方法改变了b.setValue函数中的this指针,this从而指向了a对象的value值。
关于apply,更多的是运用在函数内部,因为在函数内部有一个arguments数组,当然也可以直接传递一个数组,这样就直接可以传入到apply方法,如下实例:

 var a = {

     value: 10

 };

 var b = {

     setValue: function(num){

         this.value = this.value + num;

     }

 }

 b.setValue.apply(a, [100, 20, 30]); <<执行过后,a.value等于110;    
上一篇:js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结


下一篇:Python 学习笔记三