前端call和apply和arguement


简介

call和apply这两个方法都是函数对象的方法,需要通过函数对象交换调用

arguements是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度


提示:以下是本篇文章正文内容,下面案例可供参考

一、call和apply和arguement的作用?

示例:这两个方法都是函数对象的方法,需要通过函数对象交换调用
一.this的情况
1.this在函数调用时,this指向window;
2.this在方法调用时,this指向方法的对象
3.以构造函数调用时,this指向新创建的对象
4.使用call和apply调用时,this是指定的对象

二.当函数调用apply()和call()都会调用函数执行
1.在调用call和apply可以将一个对象指定为第一个参数
2.此时这个对象会成为函数指定的this
3.call可以将实参在对象之后依次传递
4.apply方法将实参封装到数组里统一传递

三.封装实参的对象 argument
arguement是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
//–在调用函数时,我们所传递的实参都会通过arguement来保存
//–arguement.length可以用来获取实参的长度
//我们即使不定义形参,也可以通过arguement使用实参

二、使用步骤

1.引入函数

 function fun()
        {
            alert("我是函数");
        }
        var obj={

        }

2.读入数据

代码如下(示例):

 function fun()
        {
            alert("我是函数");
        }
        var obj={

        }
          fun,call(obj,1,2);
          fun.apply(obj,[1,2]);

3.arguement函数方法

代码如下(示例):

 <script>
        function sum(){// 形参
            console.log(arguments);
            var sum = 0;
            for(var i = 0; i < arguments.length; i++){
                sum += arguments[i];
            }
            console.log(sum);
        }
        // 实际参数 --- 实参
        sum(10, 20, 3, 4, 5);

        function fn(a, b, c, d){
            console.log(arguments.length);//实参的个数
            console.log(fn.length);//形参的长度

            if(fn.length > arguments.length){
                console.log('形参多了');
            }else if ( fn.length < arguments.length){
                console.log('实参多了');
            }else{
                console.log('刚好');
            }
        }
        fn(1,2,3,4,5);

        function demo(a, b){
            a = 3;
//当形参和实参个数相同时 arguments 中的参数和 形参是一一映射的关系  在数量一直的情况下,变化会保持一致
            arguments[0] = 1;
            console.log(a);//1
        }
        demo(10, 20);

        function demo1(z, y, x){
            // x=10 y=10  z=2
            y = 10;
            arguments[0] = 2;
            x = 4;
            arguments[2] = 10;
            console.log(z,y,x);
            console.log(arguments[0], arguments[1], arguments[2]);
        }
        demo1(1, 2, 3);

  //特殊情况:实参比形参少,在函数的内部,多余的形参则不会和实参对象(arguments)中对应位置的值保持变化一致
        function demo2(a, b){
            arguments[0] = 'abc';
            arguments[1] = 2;
            b = 3;
            console.log(a, b);//'abc' 3
            console.log(arguments[0], arguments[1]);//'abc' 2

            var newArr = Array.from(arguments);
            console.log(arguments);
            console.log(newArr);
        }
        demo2(1);
    </script>

总结

1.call和appl用于调用函数时,改变函数指向的对象
2.call可以将实参在对象之后依次传递
3.apply方法将实参封装到数组里统一传递
4.arguement是一个伪数组,可以获取实参的长度 5.当形参和实参个数相同时 arguments 中的参数和 形参是一一映射的关系 在数量一直的情况下,变化会保持一致
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值