zoukankan      html  css  js  c++  java
  • call()与apply()

    1、obj1.method1.call(obj2,argument1,argument2)     

      call的作用就是把obj1的方法放到obj2上使用

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

     1 function add(a,b)  
     2 {  
     3     alert(a+b);  
     4 }  
     5 function sub(a,b)  
     6 {  
     7     alert(a-b);  
     8 }  
     9   
    10 add.call(sub,3,1);  

    3、call 的意思是把 animal 的方法放到cat上执行,原来cat是没有showName() 方法,现在是把animal 的showName()方法放到 cat上来执行,所以this.name 应该是 Cat

     1 function Animal(){    
     2     this.name = "Animal";    
     3     this.showName = function(){    
     4         alert(this.name);    
     5     }    
     6 }    
     7   
     8 function Cat(){    
     9     this.name = "Cat";    
    10 }    
    11    
    12 var animal = new Animal();    
    13 var cat = new Cat();    
    14     
    15 //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
    16 //输入结果为"Cat"    
    17 animal.showName.call(cat,",");    

    4、 Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了.

     1 function Animal(name){      
     2     this.name = name;      
     3     this.showName = function(){      
     4         alert(this.name);      
     5     }      
     6 }      
     7     
     8 function Cat(name){    
     9     Animal.call(this, name);    
    10 }      
    11     
    12 var cat = new Cat("Black Cat");     
    13 cat.showName();  

    5、多重继承

     1 function Class1() 
     2 { 
     3     this.showTxt = function(txt) 
     4     { 
     5         alert(txt); 
     6     } 
     7 } 
     8 
     9 function Class2() 
    10 { 
    11     Class1.call(this); 
    12 } 
    13 
    14 var c2 = new Class2(); 
    15 
    16 c2.showTxt("cc"); 

    class2()中继承了class1()中的方法,使用 Class1 对象代替this对象,那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了

     1 function Class10() 
     2 { 
     3     this.showSub = function(a,b) 
     4     { 
     5         alert(a-b); 
     6     } 
     7 } 
     8 
     9 function Class11() 
    10 { 
    11     this.showAdd = function(a,b) 
    12     { 
    13         alert(a+b); 
    14     } 
    15 } 
    16 
    17 
    18 function Class2() 
    19 { 
    20     Class10.call(this); 
    21     Class11.call(this); 
    22 } 

    使用两个 call 就实现多重继承了 

    说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments

  • 相关阅读:
    linux
    linux
    linux
    linux
    linux
    linux
    linux
    idea插件篇之java内存分析工具(JProfiler)
    Jmeter(线程组+http请求+汇总报告)
    ZK客户端zkClient.bat
  • 原文地址:https://www.cnblogs.com/zhanghuiyun/p/5868873.html
Copyright © 2011-2022 走看看