zoukankan      html  css  js  c++  java
  • call和apply区别

    call和apply 基本上是一个意思 区别在于call的第二个参数可以是任意的类型,而apply的第二个参数必须是数组,也可以是arguments。
    call方法:

    语法:call(thisObj,Object)
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。
    说明:
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
    /创建一个A类
    function A(){
    //类实例化时将运行以下代码
    //此时的执行上下文对象就是this,就是当前实例对象
    this.message = "message of a";
    this.getMessage = function(){
    return this.message;
    }
    }
    //创建一个A类实例对象
    var a = new A();
    //调用类实例getMessage方法获得message值
    alert(a.getMessage());
    //创建一个B类
    function B(){
    this.message = "message of b";
    this.setMessage = function(msg){
    this.message = msg;
    }
    }
    //创建一个B类实例对象
    var a = new B();
    //给对象a动态指派b的setMessage方法,注意,a本身是没有这方法的!
    b.setMessage.call(a, "a的消息");
    //下面将显示"a的消息"
    alert(a.getMessage());
    //给对象b动态指派a的getMessage方法,注意,b本身也是没有这方法的!


    apply方法:
    语法:apply(thisObj,[argArray])
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。
    说明:
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

    function print(a, b, c, d){
    alert(a + b + c + d);
    }
    function example(a, b , c , d){
    //用call方式借用print,参数显式打散传递
    print.call(this, a, b, c, d);
    //用apply方式借用print, 参数作为一个数组传递,
    //这里直接用JavaScript方法内本身有的arguments数组
    print.apply(this, arguments);
    //或者封装成数组
    print.apply(this, [a, b, c, d]);
    }
    //下面将显示"背光脚本"
    example("背" , "光" , "脚", "本");

    //例
    print.call(window, "背" , "光" , "脚", "本");
    //foo参数可能为多个
    function foo(){
    print.apply(window, arguments);
    }
  • 相关阅读:
    [MySql]insert...select 8/10
    秀出Administrator帳戶6/27
    Love
    讀取Gridview的隱藏欄8/22
    水晶報表公式換行8/2
    MySql.Data.MySqlClient.MySqlException 7/9
    mysql的錯誤日誌爆满7/24
    从汇编看c++中的const常量
    可见性和生命期的区别
    比较烦
  • 原文地址:https://www.cnblogs.com/lxl0419/p/5778039.html
Copyright © 2011-2022 走看看