• 函数对象的apply()和call()方法


      每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,特定的作用域为this参数指定的对象。

      apply()和call()真正强大的地方是能够扩充函数赖以运行的作用域。下面来看一个例子:

    window.color = "red";
    var o = {color: "blue"};
    
    function sayColor() {
        alert(this.color);
    }
    
    sayColor();                      // red
    sayColor.call(this);             // red
    sayColor.call(window);           // red
    sayColor.call(o);                // blue

      sayColor()作为全局函数定义,而且当在全局作用域中调用它时,它确实会显示“red”——因为对this.color的求值会转换成window.color的求值。而sayColor.call(this)和sayColor.call(window),则是两种显式地在全局作用域中调用函数的方式,结果当然都会显示“red”。

      但是,但运行sayColor.call(o)时,函数的执行环境就不一样了,因为此时函数体内的this对象指向了o,于是结果显示的是“blue”。

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

  • 相关阅读:
    坐标转换convertRect
    error this is not a media message!!!
    嵌入式-第一季-第4课
    嵌入式-第一季-第2课
    嵌入式-第一季-第3课
    嵌入式-第一季-第1课
    web-15. 事件与函数
    web-14. 表达式与程序流程
    web-13. 数组和字符串
    数据-第5课-线性表的本质
  • 原文地址:https://www.cnblogs.com/linxd/p/4479503.html
Copyright © 2020-2023  润新知