淺析call和apply

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.