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

  • 相关阅读:
    java数据库连接池proxool介绍及mysql8小时断开连接问题的说明
    golang 做了个mutex与atomic性能测试
    Pcre 安装
    go err
    go if switch range
    Nginx 处理Http请求头部流程
    go 指针
    golang struct、interface详解
    go slice详解
    Linux基础
  • 原文地址:https://www.cnblogs.com/linxd/p/4479503.html
Copyright © 2011-2022 走看看