標籤:pac name 個數 常用 key tab iso 建立對象 st3
概述:今天我們講一個在咱們工作中不經常用,但是卻在面試中經常被問到的方法:call方法和apply方法。call方法:call方法:調用一個對象的一個方法,以另一個對象替換當前對象。調用方法:call([thisObj,obj1,obj2....])看下面的例子:
| 12345678910 |
function add(a,b){ alert(a+b);}function sub(a,b){ alert(a-b);} add.call(sub,3,1);//4 |
結果是“4”,call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的物件內容從初始的上下文改變為由 thisObj 指定的新對象。 說的在直白點,上面例子中,把add放到了sub中執行,所以a+b = 4。 如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。apply方法:apply方法的意思和call差不多,唯一的區別就是傳遞的參數是個數組。調用方法:call([thisObj,[argArray]])看下面的例子:
| 123456789101112131415 |
function test1(name,age) { this.name=name; this.age=age; }/*定義一個學生類*/function test2(name,age,grade) { test1.apply(this,arguments); this.grade=grade; }//建立一個學生類var test3=new test2("uw3c",24,"一年級");//測試alert("name:"+test3.name+"\n"+"age:"+test3.age+"\n"+"grade:"+test3.grade); |
大家肯定會驚奇的發現,this:在建立對象在這個時候代表的是student
arguments:是一個數組,也就是["uw3c","24",”一年級”];
也就是通俗一點講就是:用test3去執行test1這個類裡面的內容,在test1這個類裡面存在this.name等之類的語句,這樣就將屬性建立到了test3對象裡面 什麼時候用call方法、apply方法:在給對象參數的情況下,如果參數的形式是數組的時候,比如apply樣本裡面傳遞了參數arguments, 這個參數是數群組類型,並且在調用test1的時候參數的列表是對應一致的(也就是test1和test2的參數列表前兩位是一致的) 就可以採用 apply , 如果我的test1的參數列表是這樣的(age,name),而test2的參數列表是(name,age,grade),這樣就可以用call來實現了,也就是直接指定參數列表對應值的位置。
淺析call和apply