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