zoukankan      html  css  js  c++  java
  • js参考---call和apply

    js参考---call和apply

    一、总结

    一句话总结:

    call和apply都是函数对象的方法,call和apply方法的作用就是修改函数执行时候的this,所以可以给方法指定对象,例如fun.call(obj,2,3);

    1、call和apply方法的作用是什么?

    call和apply方法可以调用函数(给函数指定对象的方式调用),call和apply都是函数对象的方法

    2、call和apply方法的操作对象是谁?

    都是函数,当对函数调用call()和apply()都会调用函数执行,只不过call和apply指定执行方法的对象,例如fun.call(obj,2,3);

    3、js调用函数的方式?

    函数名加圆括号,或者调用函数对象的call或apply方法

    4、call方法和apply方法的区别?

    apply是数组传实参,call是一个一个这样传实参

    call()方法可以将实参在对象之后依次传递,例如:fun.call(obj,2,3);
    apply()方法需要将实参封装到一个数组中统一传递,例如:fun.apply(obj,[2,3]);

    5、this的指向情况(加上call和apply)?

    this是谁调用它,它就指向谁,包括构造函数,call和apply相当于专门指定this

    1.以函数形式调用时,this永远都是window
    2.以方法的形式调用时,this是调用方法的对象
    3.以构造函数的形式调用时,this是新创建的那个对象
    4.使用call和apply调用时,this是指定的那个对象

    6、call和apply机制调用方法和 普通对象调用方法的区别?

    一般对对象而言,都是对象调用方法,而call和apply方法就是反过来了,就是函数来指定调用它的对象,也就是指定函数里面的this对象,例如 fun.call(obj,2,3);

    二、call和apply

    博客对应课程的视频位置:

     1 <!DOCTYPE html>
     2 <html>
     3 
     4     <head>
     5         <meta charset="UTF-8">
     6         <title></title>
     7         <script type="text/javascript">
     8             function fun(a,b) {
     9                 console.log("a = "+a);
    10                 console.log("b = "+b);
    11                 //alert(this);
    12             }
    13             
    14             var obj = {
    15                 name: "obj",
    16                 sayName:function(){
    17                     alert(this.name);
    18                 }
    19             };
    20 
    21             /*
    22              * call()和apply()
    23              *     - 这两个方法都是函数对象的方法,需要通过函数对象来调用
    24              *     - 当对函数调用call()和apply()都会调用函数执行
    25              *     - 在调用call()和apply()可以将一个对象指定为第一个参数
    26              *         此时这个对象将会成为函数执行时的this
    27              *     - call()方法可以将实参在对象之后依次传递
    28              *     - apply()方法需要将实参封装到一个数组中统一传递
    29              * 
    30              *     - this的情况:
    31              *         1.以函数形式调用时,this永远都是window
    32              *         2.以方法的形式调用时,this是调用方法的对象
    33              *         3.以构造函数的形式调用时,this是新创建的那个对象
    34              *         4.使用call和apply调用时,this是指定的那个对象
    35              */
    36             
    37             //fun.call(obj,2,3);
    38             fun.apply(obj,[2,3]);
    39 
    40             
    41 
    42             var obj2 = {
    43                 name: "obj2"
    44             };
    45 
    46             /*fun.apply();
    47             fun.call();
    48             fun();*/
    49 
    50             //fun.call(obj);
    51             //fun.apply(obj);
    52 
    53             //fun();
    54             
    55             //obj.sayName.apply(obj2);
    56         </script>
    57     </head>
    58 
    59     <body>
    60     </body>
    61 
    62 </html>
     
  • 相关阅读:
    对象数组深拷贝
    百度地图 轨迹
    vant mp-vue
    Nginx代理webSocket时60s自动断开, 怎么保持长连接
    python_传递任意数量的实参
    python_函数传递列表
    python_形参、实参
    python_函数、局部变量与全局变量
    python_三级字典
    python_字典的使用
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12434756.html
Copyright © 2011-2022 走看看