《ES6基礎教程》之 Call 方法和 Apply 方法

 1     <script type="text/javascript">
 2         // Call方法:
 3         // 語法:call(thisObj[,arg1,arg2,...,argN])
 4         // 定義:調用對象的一個方法,用另外一個對象替換當前對象
 5 
 6         // Apply方法:
 7         // 語法:apply([thisObj,argArray])
 8         // 定義:應用某一個對象的一個方法,用另外一個對象替換當前對象
 9 
10         //a,
11         function add (a,b) {
12             alert(a+b);
13         }
14         function sub(a,b){
15             alert(a-b);
16         }
17         add.call(sub,3,1);
18         用add來替換sub,add.call(sub,3,1)==add(3,1),結果是alert(4);
19         //b,
20         function Animal(){
21             this.name="Animal";
22             this.showName=function(){
23                 alert(this.name);
24             }
25         }
26         function Cat(){
27             this.name="Cat";
28         }
29         var animal=new Animal();
30         var cat=new Cat();
31 
32         animal.showName.call(cat);
33         // 經過call或者apply方法,將本來屬於Animal對象的showName()方法交給對象cat來使用。結果爲alert("Cat");
34         //c,能夠實現繼承。
35         function Animal(name){
36             this.name=name;
37             this.showName=function(){
38                 alert(this.name);
39             }
40         }
41         function Cat(name){
42             Animal.call(this,name);
43         }
44         var cat=new Cat("Black Cat");
45         cat.showName();
46         //Animal.call(this)的意思是使用Animal對象代替this對象,那麼Cat中就有了Animal的全部方法和屬性了,Cat對象就能直接調用Animal的方法和屬性了。
47         //d,多重繼承
48         function Class10(){
49             this.showSub=function(a,b){
50                 alert(a-b);
51             }
52         }
53         function Class11(){
54             this.showAdd=function(a,b){
55                 alert(a+b);
56             }
57         }
58         function Class2(){
59             Class10.call(this);
60             Class11.call(this);
61         }
62         //使用兩個call就實現多繼承了。
63 
64         call和apply的區別在於call的第二個參數能夠是任意類型,而apply的第二個參數必須是數組或者arguments
65     </script>
相關文章
相關標籤/搜索