摘要:注意該方法的作用和方法類似,只有一個(gè)區(qū)別,就是方法接受的是若干個(gè)參數(shù)的列表,而方法接受的是一個(gè)包含多個(gè)參數(shù)的數(shù)組。指定的參數(shù)列表。返回值返回值是你調(diào)用的方法的返回值,若該方法沒有返回值,則返回。
溫馨提示:作者的爬坑記錄,對你等大神完全沒有價(jià)值,別在我這浪費(fèi)生命
溫馨提示-續(xù):打call原本是屬于我們偶像宅文化中的專業(yè)名詞,指的是飯們在看live時(shí)在臺(tái)下配合愛豆演出的節(jié)奏喊口號,舉例:“超絕可愛~TJY!!!”現(xiàn)在被各種濫用,我很蛋疼
在javascript中有兩個(gè)常被提起的神奇函數(shù),傳說中的call()和apply()先看看文檔中的定義
JavaScript標(biāo)準(zhǔn)庫 - Function.prototype.call()
JavaScript標(biāo)準(zhǔn)庫 - Function.prototype.apply()
call() 方法調(diào)用一個(gè)函數(shù), 其具有一個(gè)指定的this值和分別地提供的參數(shù)(參數(shù)的列表)。
注意:該方法的作用和 apply() 方法類似,只有一個(gè)區(qū)別,就是call()方法接受的是若干個(gè)參數(shù)的列表,而apply()方法接受的是一個(gè)包含多個(gè)參數(shù)的數(shù)組。
從上面段話,我get到兩點(diǎn):1.這不是人話 2.貌似整明白call()就約等于整明白apply()了
那我就一條一條攻略吧
語法
fun.call(thisArg, arg1, arg2, ...)參數(shù)
thisArg:
在fun函數(shù)運(yùn)行時(shí)指定的this值。需要注意的是,指定的this值并不一定是該函數(shù)執(zhí)行時(shí)真正的this值,如果這個(gè)函數(shù)處于非嚴(yán)格模式下,則指定為null和undefined的this值會(huì)自動(dòng)指向全局對象(瀏覽器中就是window對象),同時(shí)值為原始值(數(shù)字,字符串,布爾值)的this會(huì)指向該原始值的自動(dòng)包裝對象。
arg1, arg2, ...:
指定的參數(shù)列表。返回值
返回值是你調(diào)用的方法的返回值,若該方法沒有返回值,則返回undefined。
參考文檔中的說明,我們可以這樣理解,call()的作用實(shí)際上就是在改變函數(shù)運(yùn)行的this結(jié)合call的詞面意思來理解,就是喊來thisArg來作為fun的this,直白點(diǎn)可以理解為,老王有洗衣服的這個(gè)方法,他給老張打電話讓他來洗衣服,老張本身是(maybe)不會(huì)洗衣服的,但是因?yàn)檫@通電話他就要去洗了。
這樣就好理解了,call()的兩個(gè)(類)參數(shù),第一個(gè)是要執(zhí)行函數(shù)/洗衣服的this(對象)/老張,從第二個(gè)開始是這個(gè)函數(shù)的參數(shù)/要洗哪些衣服,而返回值就是這個(gè)方法本身的返回值/涼到陽臺(tái)
再往簡單的理解一下,call()的執(zhí)行,其實(shí)就是在執(zhí)行fun本身,只不過改變了執(zhí)行這個(gè)函數(shù)的對象(this)
怎么call?弄明白(maybe)call()的定義之后,腦中又浮現(xiàn)出了那個(gè)陰魂不散的題目
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()());//The Window
詳情在我的另一片文章javascript對象不完全探索記錄01:this! which?- lskrat中
這題讓人懵逼的原因,就是這里面的this到底是which,出現(xiàn)“The Window”的原因說到底是因?yàn)閳?zhí)行object.getNameFunc()的是Window對象
所以為了能夠得到期待的結(jié)果,是不是可以通過call()喊來object自己來執(zhí)行呢,這就試試!
alert(object.getNameFunc().call(object));//My Object
真是效果拔群到想為call()打call!如此顯著的療效,都能用在哪呢?
打什么call?我就來試著總結(jié)一下call()都有什么用處吧//本章節(jié)陸續(xù)補(bǔ)充
1.防止懵逼,指定this
這條的來源,看過上文就都知道了,對this目標(biāo)懵逼的同學(xué)們,可以用call()來直接指定this,就讓你來執(zhí)行!
舉例:見上文
2.實(shí)現(xiàn)繼承
繼承,作為面向?qū)ο笳Z言的基礎(chǔ)特性,在javascript中有很多的實(shí)現(xiàn)方式,其中一種就是用call()
function Food(name, price) { this.name = name, this.price = price, this.getPrice = function() { console.log("吃一份" + this.name + "需要" + this.price + "塊錢!貧窮使的我保持身材") } } function RouJiaMo() { Food.call(this, "肉夾饃", 5); } var rouJiaMo = new RouJiaMo() rouJiaMo.getPrice();//吃一份肉夾饃需要5塊錢!貧窮使得我保持身材
在創(chuàng)建實(shí)例rouJiaMo時(shí),將Food()中的this換成了RouJiaMo,這也就在使得rouJiaMo不但可以擁有和Food中一樣的內(nèi)部變量并賦值,并且可以調(diào)用其內(nèi)部函數(shù),從而形成了繼承
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90280.html
摘要:春招結(jié)果五月份了,春招已經(jīng)接近尾聲,因?yàn)榈搅酥芪逋砩蟿偤糜锌眨院唵蔚赜涗浺幌伦约旱拇赫羞^程。我的春招從二月初一直持續(xù)到四月底,截止今天,已經(jīng)斬獲唯品會(huì)電商前端研發(fā)部大數(shù)據(jù)與威脅分析事業(yè)部京東精銳暑假實(shí)習(xí)生的騰訊的是早上打過來的。 春招結(jié)果 五月份了,春招已經(jīng)接近尾聲,因?yàn)榈搅酥芪逋砩蟿偤糜锌眨院唵蔚赜涗浺幌伦约旱拇赫羞^程。我的春招從二月初一直持續(xù)到四月底,截止今天,已經(jīng)斬獲唯品...
摘要:但是,我們可以借用類數(shù)組方法不難看出,此時(shí)的在調(diào)用數(shù)組原型方法時(shí),返回值已經(jīng)轉(zhuǎn)化成數(shù)組了。很多時(shí)候,深入看看源代碼也會(huì)讓你對這個(gè)理解的更透徹。的前端樂園原文鏈接深入理解類數(shù)組 起因 寫這篇博客的起因,是我在知乎上回答一個(gè)問題時(shí),說自己在學(xué)前端時(shí)把《JavaScript高級程序設(shè)計(jì)》看了好幾遍。于是在評論區(qū)中,出現(xiàn)了如下的對話:showImg(https://segmentfault.c...
摘要:的調(diào)用者,將會(huì)指向這個(gè)對象。此外,還可以擴(kuò)展自己的其他方法。的使用最后來說說。不同的是,方法的返回值是函數(shù),并且需要稍后調(diào)用,才會(huì)執(zhí)行。而和則是立即調(diào)用。總結(jié)和的主要作用,是改變對象的執(zhí)行上下文,并且是立即執(zhí)行的。 前言 上一篇文章 《「前端面試題系列4」this 的原理以及用法》 中,提到了 call 和 apply。 它們最主要的作用,是改變 this 的指向。在平時(shí)的工作中,除了...
閱讀 1428·2021-11-22 15:24
閱讀 2519·2021-10-11 11:06
閱讀 2323·2021-10-09 09:45
閱讀 2525·2021-09-09 09:33
閱讀 634·2019-08-30 15:53
閱讀 1439·2019-08-30 12:48
閱讀 657·2019-08-29 13:47
閱讀 500·2019-08-26 18:27