js的中的函數(shù)(三)
方法
什么是js的方法?簡單講,綁定到對象的函數(shù)就是方法。
this
在對象的方法中,我們常常使用this關(guān)鍵字。this關(guān)鍵字代表方法所綁定的對象。
var wangqiang = { name : "wangqiang", age : 18, city : "guangzhou", address : "tianhe", //綁定到對象的函數(shù)叫方法 getBirth:function(){ let now = new Date(); return now.getFullYear() - this.age; } } wangqiang.getBirth(); //2005 var birth = wangqiang.getBirth; birth(); //NaN,脫離了綁定的對象。上述代碼所示,在方法getBirth()內(nèi)部,我們用到了一個(gè)this關(guān)鍵字。這個(gè)關(guān)鍵字指向了綁定的對象,要正確執(zhí)行方法,需要按照 obj.xxx()的方式才能正確地調(diào)用方法,保證方法綁定的對象,this的指向才能正確。
【資料圖】
再看如下代碼:
var lili = { name : "lili", age : 12, city : "beijing", address : "chaoyang", getBirth : function(){ let diff = function(year){ //超出了this的作用范圍,this為undefined return year-this.age; } let now = new Date(); console.log(diff(2022)); return now.getFullYear() - this.age; } }在getBirth方法中,我們有定義了一個(gè)匿名函數(shù)。在匿名函數(shù)不能再使用this,因?yàn)檫@時(shí)的this是undefined。我們可以在匿名函數(shù)外部用一個(gè) 變量接收this,在匿名函數(shù)內(nèi)部再使用這個(gè)變量。也就是this對象不能跨越兩層函數(shù)進(jìn)行使用。
var lili = { name : "lili", age : 12, city : "beijing", address : "chaoyang", //方法的簡寫 getBirth(){ let that = this; let diff = function(year){ return year-that.age; } let now = new Date(); console.log(diff(2022)); return now.getFullYear() - this.age; } }為此,可以在第一次函數(shù)里用一個(gè)變量that接收this,在第二層函數(shù)里再使用that,從而避免this變量不能跨越兩層的障礙。
apply
函數(shù)通過apply方法,應(yīng)用到對象上。
var xiaoli = { name : "xiaoli", age : 12, city : "beijing", address : "chaoyang", birth : getBirth } function getBirth(){ let now = new Date(); return now.getFullYear() - this.age; } xiaoli.birth(); getBirth.apply(xiaoli,[]);//應(yīng)用到xiaoli對象上,參數(shù)數(shù)組為[] getBirth(); // Uncaught TypeError另一個(gè)與apply()類似的方法是call(),唯一區(qū)別是:
- apply()把參數(shù)打包成Array再傳入;
- call()把參數(shù)按順序傳入。
比如調(diào)用Math.max(3, 5, 4),分別用apply()和call()實(shí)現(xiàn)如下:
Math.max.apply(null, [3, 5, 4]); // 5 Math.max.call(null, 3, 5, 4); // 5
閉包
在JavaScript中,一個(gè)函數(shù)可以作為另外一個(gè)函數(shù)的參數(shù)進(jìn)行傳遞。同樣地,一個(gè)函數(shù)也可以作為另外一個(gè)函數(shù)的返回值。例如:
function lazy_sum(...rest){ return function sum(){ let reduce = rest.reduce(function(s,x){ return s += x; },6); return reduce; } } var lazy_sum1 = lazy_sum(1,2,4,6); var lazy_sum2 = lazy_sum(1,2,4,6); lazy_sum1(); //調(diào)用sum()函數(shù),返回13 lazy_sum2(); //調(diào)用sum()函數(shù),返回13 typeof lazy_sum1(); // 返回function typeof lazy_sum2(); // 返回function lazy_sum1 == lazy_sum2 // false上述代碼所示,調(diào)用lazy_sum1和lazy_sum2函數(shù),它們都返回一個(gè)sum()函數(shù)。雖然返回的名稱相同,但不同于數(shù)值的相等比較,它們并不相等。
看起來作用不大,只是可以延遲調(diào)用而已。再看下邊的例子:
//閉包可以在函數(shù)內(nèi)部封裝一個(gè)變量 function wrap(initial){ initial = initial || 0; return function inc(){ initial += 1; return initial; } } var w = wrap(2); w(); //返回3 w(); //返回4 w(); //返回5上述代碼所示,wrap()是一個(gè)函數(shù),它接收一個(gè)initial作為參數(shù),這個(gè)函數(shù)的返回值也是一個(gè)函數(shù),它是inc()。我們將inc()函數(shù)賦值給變量w, w函數(shù)調(diào)用一次返回3。接下來再調(diào)用一次,其內(nèi)部的變量initial已經(jīng)保留了3這個(gè)值,所以這時(shí)的返回值就是4。接下來的每次調(diào)用邏輯都是一致的。 這種在函數(shù)中封裝了一個(gè)變量的函數(shù)形成了閉包。這種在函數(shù)中封裝既封裝了變量,又封裝了方法的閉包,是不是有點(diǎn)像Java中的類呢?
閉包
ES6標(biāo)準(zhǔn)新增了一種新的函數(shù):Arrow Function(箭頭函數(shù))。為什么叫Arrow Function?因?yàn)樗亩x用的就是一個(gè)箭頭:
x => x * x
使用規(guī)則
上面的箭頭函數(shù)相相當(dāng)于一個(gè)匿名函數(shù):
function (x) { return x * x; }箭頭函數(shù)簡化了函數(shù)定義。箭頭函數(shù)有兩種格式,一種像上面的,只包含一個(gè)表達(dá)式,連{ ... }和return都省略掉了。 還有一種可以包含多條語句,這時(shí)候就不能省略{ ... }和return:
x => { if (x>0){ return x; }else{ return -x; } }如果函數(shù)有多個(gè)參數(shù),需使用括號,參數(shù)之間以逗號隔開
// 兩個(gè)參數(shù): (x, y) => x * x + y * y // 無參數(shù): () => 3.14 // 可變參數(shù): (x, y, ...rest) => { var i, sum = x + y; for (i=0; i < rest.length; i++) { sum += rest[i]; } return sum; }如果要返回一個(gè)對象,就要注意,如果是單表達(dá)式,這么寫的話會報(bào)錯(cuò):
// SyntaxError: x => { foo: x }表達(dá)式的對象和函數(shù)體的{...}相沖突,需在對象外加上括號:
x => ({foo:x});前面章節(jié)指出了對象方法上,this使用的注意事項(xiàng):
var lili = { name : "lili", age : 12, city : "beijing", address : "chaoyang", getBirth(){ let diff = function(year){ return year-this.age; // this指向window或undefined }; let now = new Date(); return now.getFullYear() - this.age; } }現(xiàn)在,箭頭函數(shù)完全修復(fù)了this的指向,this總是指向詞法作用域,也就是外層調(diào)用者obj:
var lili = { name : "lili", age : 12, city : "beijing", address : "chaoyang", getBirth(){ let diff = (year)=>year-this.age; // this指向lili let now = new Date(); return now.getFullYear() - this.age; } }文章同時(shí)發(fā)表在:碼農(nóng)編程網(wǎng)歡迎訪問
本節(jié)重點(diǎn):
- 什么是方法,方法的調(diào)用;
- 注意對象方法內(nèi)部的this指向,避免指向錯(cuò)誤;
- apply,call的使用和區(qū)別;
- 定義一個(gè)返回類型為函數(shù)的函數(shù);
- 如何形成閉包,閉包的使用;
- 什么是箭頭函數(shù),箭頭函數(shù)的使用;
- 箭頭函數(shù)修復(fù)了對象方法中的this指向。
關(guān)鍵詞:
相關(guān)文章
螞蟻集團(tuán)及旗下機(jī)構(gòu)被罰沒71.23億元!公司回應(yīng):已完成相關(guān)整改 誠懇接受、堅(jiān)決服從
螞蟻集團(tuán)及旗下機(jī)構(gòu)被罰沒71 23億元!公司回應(yīng):已完成相關(guān)整改誠懇接
3000萬!鄭州第一批汽車消費(fèi)券將于7月10日開始資格校驗(yàn)
7月7日,記者從市商務(wù)局獲悉,根據(jù)“樂駕一夏”汽車促消費(fèi)活動(dòng)安排,第
科學(xué)謀劃制造業(yè)鏈?zhǔn)讲季?/a>
一段時(shí)間以來,我國制造業(yè)產(chǎn)業(yè)鏈發(fā)展機(jī)制得到進(jìn)一步優(yōu)化,有力促進(jìn)
網(wǎng)紅大猩猩和小女孩合影 一套商業(yè)化流程太6 果然進(jìn)化就要上班
網(wǎng)上流傳著一個(gè)段子:為什么猩猩會停止進(jìn)化?答:因?yàn)樵龠M(jìn)化就要上班了
事業(yè)單位年度考核教師個(gè)人工作總結(jié)怎么寫(事業(yè)單位年度考核教師個(gè)人工作總結(jié))
1、個(gè)人總結(jié)一般寫1,本人崗位職責(zé)、任務(wù)、目標(biāo);2,過去一個(gè)周期內(nèi)任
精彩推送
外匯局:6月匯率折算和資產(chǎn)價(jià)格變化等因素綜合作用 當(dāng)月外匯儲備規(guī)模上升
外匯局:6月匯率折算和資產(chǎn)價(jià)格變化等因素綜合作用當(dāng)月外匯儲備規(guī)模上升
央行發(fā)布《中央銀行存款賬戶管理辦法》
據(jù)央行網(wǎng)站,為規(guī)范中央銀行存款賬戶服務(wù)和管理,提高央行貨幣結(jié)算服務(wù)
螞蟻集團(tuán)及旗下機(jī)構(gòu)被罰沒71.23億元!公司回應(yīng):已完成相關(guān)整改 誠懇接受、堅(jiān)決服從
螞蟻集團(tuán)及旗下機(jī)構(gòu)被罰沒71 23億元!公司回應(yīng):已完成相關(guān)整改誠懇接
聯(lián)仁健康前沿技術(shù)亮相2023世界人工智能大會
聯(lián)仁健康醫(yī)療大數(shù)據(jù)科技股份有限公司(以下簡稱“聯(lián)仁健康”)近日在世
2023全球數(shù)字經(jīng)濟(jì)大會“新品成果”發(fā)布
2023全球數(shù)字經(jīng)濟(jì)大會“新品成果”發(fā)布,科學(xué),信息技術(shù),數(shù)字經(jīng)濟(jì)大會
60名港澳大學(xué)生赴三亞開展暑期實(shí)習(xí)活動(dòng)
(張?jiān)潞?由海南省港澳事務(wù)辦公室、香港海南社團(tuán)總會聯(lián)合主辦的202
長青集團(tuán)(002616)7月7日主力資金凈買入2286.67萬元
截至2023年7月7日收盤,長青集團(tuán)(002616)報(bào)收于5 63元,上漲9 96%,漲
高溫連創(chuàng)新紀(jì)錄!京津冀15座“空調(diào)山”等你來避暑,走起!
接連熱出新紀(jì)錄,15座“空調(diào)山”等你來避暑!京津冀環(huán)游記,出發(fā)——
科學(xué)新發(fā)現(xiàn)丨科學(xué)家發(fā)現(xiàn)一種可對抗抗生素耐藥性和瘧疾的抗生素
佛羅里達(dá)國際大學(xué)的科學(xué)家發(fā)現(xiàn)了第一種也是唯一一種已知的天然含砷抗生
興業(yè)物聯(lián)玩起另類收購,斥資9500萬當(dāng)上開發(fā)商
文 樂居財(cái)經(jīng)徐酒眠上市三年多,興業(yè)物聯(lián)(09916 HK)終于發(fā)布了第一筆
無人機(jī)最遠(yuǎn)可送距離5公里的奶茶!美團(tuán)開啟貨運(yùn)航空商業(yè)化
南都記者獲悉,深圳·星河WORLD早在2021年就與美團(tuán)無人機(jī)合作,開通了
震蕩收跌:滬指失守3200點(diǎn)關(guān)口,兩市成交不足8000億元
震蕩收跌:滬指失守3200點(diǎn)關(guān)口,兩市成交不足8000億元,滬指,股指,漲停,
港股概念追蹤 | 油運(yùn)市場表現(xiàn)強(qiáng)勁 中遠(yuǎn)海能(01138)上半年凈利預(yù)增15倍 上行周期還能持續(xù)多久?(附概念股)
安信證券發(fā)布研究報(bào)告稱,油運(yùn)供需周期確定性強(qiáng),行業(yè)處于淡季尾聲,下
【央廣網(wǎng)評】海鮮店缺斤短兩被罰30萬 唯有重罰“肉痛”方能止損“療傷”
近日,三亞市市監(jiān)局通報(bào)一起欺詐消費(fèi)者事件:涉事商戶“三亞天涯彭進(jìn)風(fēng)
國家防總維持針對重慶等7個(gè)省份的防汛四級應(yīng)急響應(yīng)
中新網(wǎng)7月7日電據(jù)應(yīng)急管理部網(wǎng)站消息,目前,國家防總維持針對重慶等7
巴爺:追夢&保羅領(lǐng)導(dǎo)球隊(duì)想法類似 他們都想為球隊(duì)爭取到最好結(jié)果
直播吧7月7日訊日前參加電臺節(jié)目《Willard&Dibs》時(shí),前NBA球員馬特-巴
因未按規(guī)定履行客戶身份識別義務(wù)等 人保財(cái)險(xiǎn)被央行罰款464萬元
同時(shí),該公司兩名高管一同被罰,累計(jì)罰款9 5萬元
4 Wheel OffRoad Monster Truck什么時(shí)候出 公測上線時(shí)間預(yù)告
導(dǎo)讀:最近很多玩家都在關(guān)注4WheelOffRoadMonsterTruck這款手游,想知
太極集團(tuán):公司嚴(yán)格按照《上海證券交易所股票上市規(guī)則》的規(guī)定履行信息披露義務(wù)
太極集團(tuán)60012907月07日在投資者關(guān)系平臺上答復(fù)了投資者關(guān)心的問題投資
讀秒絕殺!核心2連蹬紅牌罰下,泰山硬氣1戰(zhàn),費(fèi)南多讓球迷流淚!
中超聯(lián)賽展開新一輪的較量,上輪吃虧的山東泰山隊(duì)來到客場,挑戰(zhàn)中超勁
寧夏隆德神林鄉(xiāng):以冷涼蔬菜產(chǎn)業(yè)繪就農(nóng)民增收新圖景
近年來,神林鄉(xiāng)對標(biāo)“五特五新五優(yōu)”產(chǎn)業(yè)布局,緊盯冷涼蔬菜特色產(chǎn)業(yè),
我國科學(xué)家提出揭示宇宙第一代星系和暗物質(zhì)的新方法
記者從中國科學(xué)院國家天文臺獲悉,北京時(shí)間2023年7月7日凌晨,國際學(xué)術(shù)
洗衣機(jī)運(yùn)輸螺栓怎么拆裝(博世洗衣機(jī)運(yùn)輸螺栓怎么拆裝)
洗衣機(jī)運(yùn)輸螺栓怎么拆裝,洗衣機(jī)運(yùn)輸螺栓拆裝的方法是需要先拆掉后蓋自
長城汽車(601633):6月新能源表現(xiàn)優(yōu)異 多款重磅新車即將上市
長城汽車(601633):6月新能源表現(xiàn)優(yōu)異多款重磅新車即將上市
青島市社會保障局官網(wǎng)(青島社保網(wǎng)官網(wǎng))
1、登陸青島人力資源和社會保障局網(wǎng)站,通過個(gè)人查詢頁面進(jìn)入,用戶名
海關(guān)總署:為防范受到放射性污染的日本食品輸華 禁止進(jìn)口日本福島等十個(gè)縣(都)食品
海關(guān)總署進(jìn)出口食品安全局負(fù)責(zé)人就國際原子能機(jī)構(gòu)發(fā)布日本福島核污染水
6月制造業(yè)生產(chǎn)活動(dòng)擴(kuò)張 不同規(guī)模企業(yè)景氣水平分化 | 高頻看宏觀
一、第一財(cái)經(jīng)中國高頻經(jīng)濟(jì)活動(dòng)指數(shù)2023年7月4日第一財(cái)經(jīng)中國高頻經(jīng)濟(jì)活
順德區(qū)養(yǎng)老院哪家好?順德區(qū)養(yǎng)老院一覽表
1、和泰中心和泰中心是一家醫(yī)養(yǎng)結(jié)合型養(yǎng)老機(jī)構(gòu),位于廣東佛山順德區(qū)北
軟通動(dòng)力成功中標(biāo)知名財(cái)產(chǎn)保險(xiǎn)公司車險(xiǎn)業(yè)務(wù)管理信息系統(tǒng)項(xiàng)目
近日,軟通動(dòng)力成功中標(biāo)某知名財(cái)產(chǎn)保險(xiǎn)有限公司車險(xiǎn)業(yè)務(wù)管理信息系統(tǒng)項(xiàng)
綠地控股: 近年來,受多種因素影響,行業(yè)經(jīng)歷了前所未有的困難與挑戰(zhàn)
綠地控股(600606)07月07日在投資者關(guān)系平臺上答復(fù)了投資者關(guān)心的問題。
蕪湖經(jīng)開區(qū):重拳出擊,讓山寨無所遁形
7月7日上午,蕪湖經(jīng)開區(qū)市場監(jiān)管局接到舉報(bào)線索,反映經(jīng)開區(qū)轄區(qū)內(nèi)一企
讓利型基金要來了?與浮動(dòng)費(fèi)率產(chǎn)品差異較大,業(yè)內(nèi)多家機(jī)構(gòu)稱已上報(bào)實(shí)施方案
記者從業(yè)內(nèi)多家公募基金公司了解情況獲悉,從去年開始,就已經(jīng)有多家機(jī)
逃過一劫!足協(xié)手下留情,泰山隊(duì)將帥免罰,中超黑哨好日子到頭了
眾所周知,中超聯(lián)賽的爭議判罰,又再次改變了某些比賽的結(jié)果,某些球隊(duì)
長虹華意(000404.SZ)半年度扣非凈利潤預(yù)增119.98%-164.27%
格隆匯7月7日丨長虹華意(000404)(000404 SZ)公布,預(yù)計(jì)2023年半年度歸
3000萬!鄭州第一批汽車消費(fèi)券將于7月10日開始資格校驗(yàn)
7月7日,記者從市商務(wù)局獲悉,根據(jù)“樂駕一夏”汽車促消費(fèi)活動(dòng)安排,第
鄭氏點(diǎn)銀:黃金重點(diǎn)留意1918節(jié)點(diǎn)得失,原油72.5逢高承壓
鄭氏點(diǎn)銀:黃金重點(diǎn)留意1918節(jié)點(diǎn)得失,原油72 5逢高承壓回顧昨日行情走
騰訊回應(yīng)財(cái)付通被罰沒近30億元:對集團(tuán)沒有任何重大不利影響
騰訊回應(yīng)財(cái)付通被罰沒近30億元:對集團(tuán)沒有任何重大不利影響,騰訊,金融
公司快評 | 5倍牛股鴻博股份AI業(yè)務(wù)毛利僅12萬 與英偉達(dá)的“緊密關(guān)系”是真是假?
今年以來,鴻博股份(SZ002229,股價(jià)36 99元,總市值184億元)漲幅超過
嚴(yán)防“套路應(yīng)聘”,上海網(wǎng)信辦等部門對網(wǎng)絡(luò)招聘平臺開展分類指導(dǎo)
“網(wǎng)信上海”微信公眾號消息,7月6日上午,上海網(wǎng)信辦聯(lián)合市人社局、市
美加息預(yù)期升溫 一個(gè)月港元拆息逾兩周新高 短期息回落
智通財(cái)經(jīng)APP獲悉,7月7日,美國加息憂慮增加,港元拆息呈現(xiàn)短息跌、長
俄稱多線擊退烏進(jìn)攻 烏稱打擊俄防空系統(tǒng)
俄羅斯國防部當(dāng)?shù)貢r(shí)間7月7日發(fā)布戰(zhàn)報(bào)稱,俄軍在頓涅茨克、紅利曼、赫爾
【新時(shí)代 新征程 新偉業(yè)】延壽縣人民政府與哈爾濱學(xué)院戰(zhàn)略合作框架協(xié)議簽約儀式舉行
延壽縣人民政府與哈爾濱學(xué)院戰(zhàn)略合作框架協(xié)議簽約儀式7月7日舉行。哈爾
走進(jìn)經(jīng)開區(qū)消防救援站 上一堂消防安全實(shí)踐課
中國江蘇網(wǎng)7月7日宿遷訊為加強(qiáng)同學(xué)們對消防安全和消防職業(yè)的認(rèn)識和理解
記者觀察:互聯(lián)網(wǎng)3.0時(shí)代來臨 將帶來哪些數(shù)字化新機(jī)遇
互聯(lián)網(wǎng)3 0的迅速崛起,將帶來哪些數(shù)字化經(jīng)濟(jì)新機(jī)遇?2023全球數(shù)字經(jīng)濟(jì)
2023安徽銅陵職業(yè)技術(shù)學(xué)院招聘專業(yè)測試有關(guān)事項(xiàng)公告
根據(jù)《2023年銅陵市市直事業(yè)單位公開招聘工作人員公告》精神,現(xiàn)將我院
市場平淡,多位選手仍抓漲停!第一名選手沖刺30%收益,下周大盤很關(guān)鍵!
粉絲朋友們,周五A股表現(xiàn)平淡,市場熱點(diǎn)稀少,CPO板塊在早盤出現(xiàn)大幅殺
“百名臺商百家臺企云南行”走進(jìn)易門 尋發(fā)展新機(jī)話融合發(fā)展
考察團(tuán)了解易門銅礦文化(圖片來源:易門縣臺辦) 中國臺灣網(wǎng)7月7日
2019年中考各個(gè)學(xué)校的錄取分?jǐn)?shù)線是多少(2019年中考各個(gè)學(xué)校的錄取分?jǐn)?shù)線)
1、三區(qū)一地(云巖、南明、觀山湖、原小河區(qū))公立普通中學(xué)在線報(bào)名最
華為開發(fā)者大會2023(Cloud)召開 數(shù)字經(jīng)濟(jì)ETF(560800)跌幅收窄
(相關(guān)資料圖)(相關(guān)資料圖)7月7日,三大股指全天低開震蕩,數(shù)字經(jīng)濟(jì)板塊
Fixflo宣布與Alto建立新的合作伙伴關(guān)系
Fixflo表示,這兩種軟件解決方案現(xiàn)在可以同時(shí)使用,自動(dòng)化和簡化其物業(yè)
【速看】預(yù)計(jì)7月末陸續(xù)投運(yùn)!3000個(gè)充電樁,快充占比超95%
長春城投集團(tuán)積極推進(jìn)我市充電基礎(chǔ)設(shè)施建設(shè),全力打造我市新能源充電網(wǎng)
71.23億元!螞蟻集團(tuán)及旗下機(jī)構(gòu)被罰
金融管理部門善始善終推進(jìn)平臺企業(yè)金融業(yè)務(wù)整改著力提升平臺企業(yè)常態(tài)化
北大燕京學(xué)堂留學(xué)生體驗(yàn)巴蜀文化:“中國古人何其聰慧”
北京日報(bào)客戶端|記者徐顥哲北京大學(xué)燕京學(xué)堂中國學(xué)碩士生前往重慶市與
