• call和apply的异同


    共同点:

    作用:调用一个对象的一个方法,以另一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

    以call为例,语法:obj1.method1.call(obj2,argument1,argument2)

    举一个具体的例子 
    function add(a,b) 

        alert(a+b); 

    function sub(a,b) 

        alert(a-b); 


    add.call(sub,3,1); 

    这个例子中的意思就是用 add来替换sub ,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。 


    看一个稍微复杂一点的例子 

    function Class1() 

        this.name = "class1"; 

        this.showNam = function() 
        { 
            alert(this.name); 
        } 


    function Class2() 

        this.name = "class2"; 


    var c1 = new Class1(); 
    var c2 = new Class2(); 

    c1.showNam.call(c2); 

    注意,call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :alert("class2"); 

     继承

    function Class1() 

        this.showTxt = function(txt) 
        { 
            alert(txt); 
        } 


    function Class2() 

        Class1.call(this); 


    var c2 = new Class2(); 

    c2.showTxt("cc"); 

    这样 Class2 就继承Class1了,Class1.call(this) 的 意思就是使用 Class1 对象代替this对象,那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”); 

    不同点:

    call第二个参数为参数列表

    apply第二个参数为数组或者arguments对象

  • 相关阅读:
    主席树学习笔记(静态区间第k大)
    p1156 题解(未完全解决)
    树上神奇 逆 逆序对(我的叫法)hh的小纸条 重中之重!!!!!
    二叉查找树学习笔记(BST)
    负环...坑点
    差分约束系统学习笔记
    tarjan学习(复习)笔记(持续更新)(各类找环模板)
    分层图食用简介
    js数组方法
    灵动标签调用父栏目下的所有文章
  • 原文地址:https://www.cnblogs.com/cumting/p/6715036.html
Copyright © 2020-2023  润新知