zoukankan      html  css  js  c++  java
  • 函数对象的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()来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。

  • 相关阅读:
    php yii多表查询
    [EA]反向工程
    [EA]入门教程
    [EA]DB数据逆向工程
    [MacromediaFlashMX]破解版下载
    [Git]Git-Github入门
    [github]Github上传代码
    [Apache]Windows下Apache服务器搭建
    [Apache]安装中出现的问题
    [ASP调试]小旋风Web服务器使用
  • 原文地址:https://www.cnblogs.com/linxd/p/4479503.html
Copyright © 2011-2022 走看看