摘要:和的區別和作用都是把綁定到的作用,即改變的指向,然而唯一的區別就是傳遞的參數必須得是數組的形式傳遞,而則直接連續參數傳遞和在什么地方可以用到呢當一個對象需要調用另外一個對象里面的方法的時候就可以用到和,和可以理解成是繼承另外一個對象的方法,
call和apply的區別
obj.call(thisObj, arg1, arg2, ...);
obj.apply(thisObj, [arg1, arg2, ...]);
call和apply作用都是把obj綁定到thisObj的作用,即改變this的指向,然而唯一的區別就是apply傳遞的參數必須得是數組的形式傳遞,而call則直接連續參數傳遞
當一個對象需要調用另外一個對象里面的方法的時候就可以用到call和apply,call和Apply可以理解成是繼承另外一個對象的方法,以下代碼舉例:
首先,我們先建立兩個對象,obj1和obj2
var name = "全局中的name"; var obj1 = { name:"obj1中的name", func1:function(){ console.log(this.name); }, func2:function (a,b) { console.log(a+b); return a+b; } } var obj2 = { name:"obj2中的name" }
如果obj2對象要調用obj1中的func1方法,則
obj1.func1.call(obj2); //輸出:obj2中的name obj1.func1.apply(obj2);//輸出:obj2中的name
call和apply第一個參數都是表示obj1綁定的對象,如果obj1要綁定到this,此時obj1就是綁定到全局,如:
obj1.func1.call(this);//輸出:全局中的name obj1.func1.apply(this);//輸出:全局中的name
如果obj2對象要調用obj1中的func2方法,則
obj1.func2.call(obj2,1,2);//輸出:3 obj1.func2.apply(obj2,[1,2]);//輸出:3
此時func2方法是有參數的,call和apply中第二個參數開始是傳給func2方法的參數,但是call參數是直接連續傳遞,而apply傳遞參數是以一個數組傳遞
全部代碼展示:
var name = "全局中的name"; var obj1 = { name:"obj1中的name", func1:function(){ console.log(this.name); }, func2:function (a,b) { console.log(a+b); return a+b; } } var obj2 = { name:"obj2中的name" } obj1.func1.call(this);//輸出:全局中的name obj1.func1.apply(this);//輸出:全局中的name obj1.func1.call(obj2); //輸出:obj2中的name obj1.func1.apply(obj2);//輸出:obj2中的name obj1.func2.call(obj2,1,2);//輸出:3 obj1.func2.apply(obj2,[1,2]);//輸出:3
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89934.html
摘要:和的區別和作用都是把綁定到的作用,即改變的指向,然而唯一的區別就是傳遞的參數必須得是數組的形式傳遞,而則直接連續參數傳遞和在什么地方可以用到呢當一個對象需要調用另外一個對象里面的方法的時候就可以用到和,和可以理解成是繼承另外一個對象的方法, call和apply的區別 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1...
摘要:的調用者,將會指向這個對象。此外,還可以擴展自己的其他方法。的使用最后來說說。不同的是,方法的返回值是函數,并且需要稍后調用,才會執行。而和則是立即調用??偨Y和的主要作用,是改變對象的執行上下文,并且是立即執行的。 前言 上一篇文章 《「前端面試題系列4」this 的原理以及用法》 中,提到了 call 和 apply。 它們最主要的作用,是改變 this 的指向。在平時的工作中,除了...
摘要:和類似,都是調用函數,并指定函數的值和參數,區別在于傳入參數是通過參數列表的形式,傳入參數是通過數組的形式方法與前兩個不同,它創建一個新的函數,在調用新函數時,會調用原函數,并指定原函數的值和參數。執行的時候并沒有調用函數。 簡介 JavaScript 中有三個方法Function.prototype.call()、Function.prototype.apply()和Function...
摘要:奔著一星期徹底弄清楚一個小知識點的目的這次的目標是方法在實際項目中經常會用到這三個函數只是簡單的知道都是用來進行上下文綁定的這三個函數都可以實現現在看來這三者還是有很大區別的特別是和其他兩個的區別先說和目的是改變函數的執行上下文下面列舉一些 奔著一星期徹底弄清楚一個javascript小知識點的目的,這次的目標是call apply bind方法 在實際項目中,經常會用到這三個函數,只...
閱讀 2398·2021-11-23 09:51
閱讀 1209·2021-11-22 13:54
閱讀 3422·2021-09-24 10:31
閱讀 1066·2021-08-16 10:46
閱讀 3619·2019-08-30 15:54
閱讀 700·2019-08-30 15:54
閱讀 2886·2019-08-29 17:17
閱讀 3154·2019-08-29 15:08