call方法

  总的来说call()有这几种作用:1.可以借用另一个对象的方法。2.改变this的指向(重要)。3.将arguments数组化。下面详细介绍这三种作用:

  1.可以借用另一个对象的方法:当一个对象需要借用另一个对象的方法时,此时需要用到call()方法。

 1     //对象1
 2     var myclass={
 3         getNumbers:function(sum,sum1){
 4             return sum+sum1;
 5         }
 6     };
 7     //对象2
 8     var student={
 9         getDetail:function(){
10             return {name:'张三',habits:'打篮球'}
11         }
12     };
13     //借用 
14     console.log(myclass.getNumbers.call(student,10,200)); //210

这里student对象想要借用myclass对象中的getNumbers方法,需要借用谁的,就将它写在前头。这样就可以实现调用,需要注意的是函数也是对象,同样可以用call方法。

  2.改变this的指向(重要)。

  先来看个例子: 1 用户名:<input type=”text” id=“text” value=”张三” /> 

1 var value="李四";
2     //函数中默认this指向window
3     function fn1(){
4         console.log(this.value);
5     }
6     fn1();//李四

可以看出此时要想获得表单中的value值是获取不到的。那要如何才能获取到呢,这时call的作用就体现出来了。可以用以下方式获取:

1 function fn1(){
2         console.log(this.value);
3     }
4     fn1.call(document.getElementById('text')); //张三

这个时候this指向input元素对象。

总结一下:call是函数下的一个方法,call()方法的第一个参数可以改变函数执行过程中内部this的指向,第二个参数开始就是原来函数的参数列表。

3.将arguments数组化。

  这里先简单介绍一下什么是arguments:arguments是一个数组对象,用于保存函数的参数,准确点说应该是一个伪数组,你可以使用arguments对象在函数中引用函数的参数,它只有在代码运行的时候才起作用。如:

 1 function add() {
 2         var sum = 0,
 3             len = arguments.length;
 4         for (var i = 0; i < len; i++) {
 5             sum += arguments[i];
 6         }
 7         return sum;
 8     }
 9     console.log(add());              // 0
10     console.log(add(1));             // 1
11     console.log(add(1, 2, 3, 4));    // 10

说arguments是一个伪数组,那什么是伪数组,伪数组就是它类似于数组,但除了length属性和索引元素之外没有任何Array属性,比如没有push方法

 

改变

版权声明:本文为zstarxp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zstarxp/p/8747021.html