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

posted @ 2016-09-13 16:24  ^^-^^-  阅读(146)  评论(0编辑  收藏  举报