• 我总结的call()与apply()方法的区别


    【call()与apply()的区别】
    在ECMAScript中每一个函数都是function类型(是javascript的基本引用类型)的实例,具有一定的属性和方法。call()和apply()则是这个function类型的实例的方法。每个函数都包含这两个非继承而来的方法。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。(用于传递参数)

    区别:
    apply()方法:接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组(可以是Array的实例,也可以是arguments对象)。
    语法:apply(thisObj,[argArray])
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。

    <!DOCTYPE html>
     <html>
     <head>
        <meta charset="utf-8">
         <title>apply()例子</title>
         <script type="text/javascript">
             function sum(num1,num2){
                 return num1 + num2;
             }
    
             function callsum1(num1,num2){
                 return sum.apply(this,[num1,num2]);//传入数组
             }
             function callsum2(num1,num2){
                 return sum.apply(this,arguments);//传入arguments对象
             }
    
             alert(callsum1(10,10));
             alert(callsum2(10,10));
         </script>
     </head>
     <body>
     
     </body>
     </html>

    call()方法:他与apply()方法的区别仅在与接收参数的方式不同。对于call()方法而言,第一个参数是this值没有变化变化的是其余参数都直接传递个函数。换句话说就是在使用call()方法时,传递给函数的参数必须逐个例举出来。
    语法:call(thisObj,Object)
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。

    <!DOCTYPE html>
     <html>
     <head>
        <meta charset="utf-8">
         <title>call()例子</title>
         <script type="text/javascript">
             function sum(num1,num2){
                 return num1 + num2;
             }
    
             function callsum(num1,num2){
                 return sum.call(this, num1, num2); 
             }
    
             alert(callsum(10,10));
         </script>
     </head>
     <body>
    
     </body>
     </html>

    事实上,传递参数并非apply()和call()的用武之地,他们真正强大的地方是能够扩充函数赖以运行的作用域。这样的好处在于对象和方法不需要有任何耦合关系。这个在《javascript高级程序设计》-第三版书中117-118页有详细介绍。

  • 相关阅读:
    mysql 性能优化方案
    MYSQL 优化常用方法
    MongoDB集群架构及搭建
    memcache分布式 [一致性hash算法] 的php实现
    memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法
    【转】linux 查看进程启动路径
    centos7 编译安装nginx+tcp+grpc转发
    mongodb笔记
    【转】mysql 解事务锁
    【转】centos7 搭建etcd集群
  • 原文地址:https://www.cnblogs.com/yehui-mmd/p/5851320.html
Copyright © 2020-2023  润新知