zoukankan      html  css  js  c++  java
  • javascript之apply()和call()用法浅析

    每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

    首先,apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是Array的实例,也可以是arguments对象。

    call()方法与apply()方法的作用相同。它们的区别仅在于接收参数的方式不同。对于call()方法而言,第一个参数是this值没有变化,变化的是其余参数都

    直接传递给函数。换句话说,在使用call()方法时, 传递给函数的参数必须逐个列举出来。

    事实上,传递参数并非apply()和call()真正的用武之地;它们真正强大的地方是能够扩充函数赖以运行的作用域。

    使用call()或apply()来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
    </head>
    <body>
        <script type="text/javascript">
            function sum(num1, num2) {
                return num1 + num2;
            }
            function callSum1(num1, num2) {
                return sum.apply(this, arguments);
            }
            function callSum2(num1, num2) {
                return sum.apply(this, [num1, num2]);
            }
            function callSum3(num1, num2) {
                return sum.call(this, num1, num2);
            }
            alert(callSum1(10, 5));
            alert(callSum2(20, 30));
            alert(callSum3(20, 50));
    
            window.color = 'red';
            var o = {color: 'blue'};
    
            function sayColor() {
                alert(this.color);
            }
    
            sayColor.call(this);        //red
            sayColor.call(window);      //red
            sayColor.call(o);           //blue
        </script>
    </body>
    </html>


  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/xutongbao/p/9924990.html
Copyright © 2011-2022 走看看