1. 程式人生 > >js的call和apply方法

js的call和apply方法

1.call() 語法:obj1.call(obj2[,param1,param2,...]) 定義:用obj2物件來代替obj1,呼叫obj1的方法。即將obj1應用到obj2上。 說明:call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 obj2 指定的新物件。 如果沒有提供 obj2引數,那麼 Global 物件被用作 obj2。 

2.apply() 語法:obj1.apply(obj2[,arrArg]) 定義:用obj2物件來代替obj1,呼叫obj1的方法。即將obj1應用到obj2上。

說明:call ()和apply()作用一樣,但是call()可以接收任何型別的引數,而apply()只能接收陣列引數。

作用:這兩個函式都是在特定的作用域中呼叫函式,能改變函式的作用域,實際上是改變函式體內 this 的值 。

3.基本用法  function add(a,b){         return a+b;     }     function sub(c,d){         return c-d;     }     function result(){         this.addValue = null;         this.subValue = null;         this.showResult=function(){             alert(this.addValue);             alert(this.subValue);         }     }        function myCallTest(){//此處this指向了add,如果不使用call則this指向window物件             return add.call(this,7,2);     }     var r = new result();     console.log(myCallTest());//9     r.addValue = add.call(sub,4,2); //6,將add方法應用到sub上,即sub的指標指向add方法     r.subValue = sub.call(add,4,2); //2,用add物件替換sub物件,並呼叫sub物件的方法     r.showResult(); //在js中函式也是一個Function物件,函式名即是物件引用

4.繼承特性 function add(a,b){     return a+b; } function sub(c,d){     return c-d; } function result(){     this.addValue = null;     this.subValue = null;     this.showResult=function(){         alert(this.addValue);         alert(this.subValue);     } } var r = new result(); r.addValue = add.call(r,4,2);    //6,r繼承add函式的所有特性 r.subValue = sub.call(r,4,2);    //2,r整合sub函式的所有特性 r.showResult();