美文网首页
javascrpt中的call方法

javascrpt中的call方法

作者: 索伯列夫 | 来源:发表于2018-10-05 00:03 被阅读0次

    早期的博客4
    call方法:

    语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。

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

    常用示例:

    先做说明:obj1.method1.call(obj2,arguments1,arguments2) 加上call的作用就是把obj1的方法放到obj2上使用,后面的arguments作为参数传入;

    例1:

    function add(a,b){
      alert(a+b);
    }
    function sub(a,b){
      alert(a-b);
    }
    add.call(sub,3,1);
    

    这个例子的意思就是把add的方法放到sub上执行,即用add替换sub,也就是add.call(sub,3,1) == add(3,1) ,所以运行结果为alert(4);

    例2:

    function Class1(){
      this.name = "class1";
      this.showName = function(){
        alert(this.name);
      }
    }
    
    function Class2(){
      this.name = "class2";
    }
    
    var c1 = new Class1();
    var c2 = new Class2();
    
    c1.showName.call(c2);   //alert("class2)
    

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

    实现继承:

    例3:

    function Class1(){
      this.showTxt = function(txt){
        alert(txt);
      }
    }
    
    function Class2(){
      class1.call(this);
    }
    
    var c2 = new Class2();
    c2.showTxt("cc");   //cc
    

    这样Class2就继承Class1,Class1.call(this) 的意思就是使用Class1对象替代this对象,那么在Class2中就是Class1的所有属性和方法了,c2对象能够直接调用Class1的方法以及属性。等于把父类的实例属性复制了一份给子类实例装上了(完全没有用到原型)

    例4:(多重继承)

    function Class10() 
    { 
        this.showSub = function(a,b) 
        { 
            alert(a-b); 
        } 
    } 
    
    function Class11() 
    { 
        this.showAdd = function(a,b) 
        { 
            alert(a+b); 
        } 
    } 
    
    
    function Class2() 
    { 
        Class10.call(this); 
        Class11.call(this); 
    }    

    相关文章

      网友评论

          本文标题:javascrpt中的call方法

          本文链接:https://www.haomeiwen.com/subject/wgufaftx.html