摘要:和的區(qū)別和作用都是把綁定到的作用,即改變的指向,然而唯一的區(qū)別就是傳遞的參數(shù)必須得是數(shù)組的形式傳遞,而則直接連續(xù)參數(shù)傳遞和在什么地方可以用到呢當(dāng)一個(gè)對(duì)象需要調(diào)用另外一個(gè)對(duì)象里面的方法的時(shí)候就可以用到和,和可以理解成是繼承另外一個(gè)對(duì)象的方法,
call和apply的區(qū)別
obj.call(thisObj, arg1, arg2, ...);
obj.apply(thisObj, [arg1, arg2, ...]);
call和apply作用都是把obj綁定到thisObj的作用,即改變this的指向,然而唯一的區(qū)別就是apply傳遞的參數(shù)必須得是數(shù)組的形式傳遞,而call則直接連續(xù)參數(shù)傳遞
當(dāng)一個(gè)對(duì)象需要調(diào)用另外一個(gè)對(duì)象里面的方法的時(shí)候就可以用到call和apply,call和Apply可以理解成是繼承另外一個(gè)對(duì)象的方法,以下代碼舉例:
首先,我們先建立兩個(gè)對(duì)象,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對(duì)象要調(diào)用obj1中的func1方法,則
obj1.func1.call(obj2); //輸出:obj2中的name obj1.func1.apply(obj2);//輸出:obj2中的name
call和apply第一個(gè)參數(shù)都是表示obj1綁定的對(duì)象,如果obj1要綁定到this,此時(shí)obj1就是綁定到全局,如:
obj1.func1.call(this);//輸出:全局中的name obj1.func1.apply(this);//輸出:全局中的name
如果obj2對(duì)象要調(diào)用obj1中的func2方法,則
obj1.func2.call(obj2,1,2);//輸出:3 obj1.func2.apply(obj2,[1,2]);//輸出:3
此時(shí)func2方法是有參數(shù)的,call和apply中第二個(gè)參數(shù)開始是傳給func2方法的參數(shù),但是call參數(shù)是直接連續(xù)傳遞,而apply傳遞參數(shù)是以一個(gè)數(shù)組傳遞
全部代碼展示:
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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/89934.html
摘要:和的區(qū)別和作用都是把綁定到的作用,即改變的指向,然而唯一的區(qū)別就是傳遞的參數(shù)必須得是數(shù)組的形式傳遞,而則直接連續(xù)參數(shù)傳遞和在什么地方可以用到呢當(dāng)一個(gè)對(duì)象需要調(diào)用另外一個(gè)對(duì)象里面的方法的時(shí)候就可以用到和,和可以理解成是繼承另外一個(gè)對(duì)象的方法, call和apply的區(qū)別 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1...
摘要:的調(diào)用者,將會(huì)指向這個(gè)對(duì)象。此外,還可以擴(kuò)展自己的其他方法。的使用最后來說說。不同的是,方法的返回值是函數(shù),并且需要稍后調(diào)用,才會(huì)執(zhí)行。而和則是立即調(diào)用。總結(jié)和的主要作用,是改變對(duì)象的執(zhí)行上下文,并且是立即執(zhí)行的。 前言 上一篇文章 《「前端面試題系列4」this 的原理以及用法》 中,提到了 call 和 apply。 它們最主要的作用,是改變 this 的指向。在平時(shí)的工作中,除了...
摘要:和類似,都是調(diào)用函數(shù),并指定函數(shù)的值和參數(shù),區(qū)別在于傳入?yún)?shù)是通過參數(shù)列表的形式,傳入?yún)?shù)是通過數(shù)組的形式方法與前兩個(gè)不同,它創(chuàng)建一個(gè)新的函數(shù),在調(diào)用新函數(shù)時(shí),會(huì)調(diào)用原函數(shù),并指定原函數(shù)的值和參數(shù)。執(zhí)行的時(shí)候并沒有調(diào)用函數(shù)。 簡介 JavaScript 中有三個(gè)方法Function.prototype.call()、Function.prototype.apply()和Function...
摘要:奔著一星期徹底弄清楚一個(gè)小知識(shí)點(diǎn)的目的這次的目標(biāo)是方法在實(shí)際項(xiàng)目中經(jīng)常會(huì)用到這三個(gè)函數(shù)只是簡單的知道都是用來進(jìn)行上下文綁定的這三個(gè)函數(shù)都可以實(shí)現(xiàn)現(xiàn)在看來這三者還是有很大區(qū)別的特別是和其他兩個(gè)的區(qū)別先說和目的是改變函數(shù)的執(zhí)行上下文下面列舉一些 奔著一星期徹底弄清楚一個(gè)javascript小知識(shí)點(diǎn)的目的,這次的目標(biāo)是call apply bind方法 在實(shí)際項(xiàng)目中,經(jīng)常會(huì)用到這三個(gè)函數(shù),只...
閱讀 2408·2021-11-23 09:51
閱讀 1219·2021-11-22 13:54
閱讀 3428·2021-09-24 10:31
閱讀 1095·2021-08-16 10:46
閱讀 3629·2019-08-30 15:54
閱讀 710·2019-08-30 15:54
閱讀 2892·2019-08-29 17:17
閱讀 3163·2019-08-29 15:08