日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript哪些場(chǎng)景不能使用箭頭函數(shù)

瀏覽:157日期:2023-10-01 13:45:02
1. 定義對(duì)象方法

JS 中對(duì)象方法的定義方式是在對(duì)象上定義一個(gè)指向函數(shù)的屬性,當(dāng)方法被調(diào)用的時(shí)候,方法內(nèi)的 this 就會(huì)指向方法所屬的對(duì)象。

let obj = { array: [1, 2, 3], sum: () => {console.log(this === window); // truereturn this.array.reduce((result, item) => result + item); }};console.log(this === window); //trueobj.sum();//報(bào)錯(cuò):Uncaught TypeError: Cannot read property ’reduce’ of undefined at Object.sum

運(yùn)行時(shí) this.array 是未定義的,調(diào)用 obj.sum 的時(shí)候,執(zhí)行上下文里面的 this 仍然指向的是 window,原因是箭頭函數(shù)把函數(shù)上下文綁定到了 window 上,this.array 等價(jià)于 window.array,顯然后者是未定義的。

修改方式:使用函數(shù)表達(dá)式或者方法簡(jiǎn)寫(xiě)(ES6 中已經(jīng)支持)來(lái)定義方法,這樣能確保 this 是在運(yùn)行時(shí)是由包含它的上下文決定的。代碼如下:

let obj = { array: [1, 2, 3], sum() {console.log(this === window); // falsereturn this.array.reduce((result, item) => result + item); }};console.log(this === window); //trueconsole.log(obj.sum());//62.定義原型方法

同樣的規(guī)則適用于原型方法(prototype method)的定義,使用箭頭函數(shù)會(huì)導(dǎo)致運(yùn)行時(shí)的執(zhí)行上下文錯(cuò)誤。比如下面代碼:

function Cat(name) { this.name = name;}Cat.prototype.sayCatName = () => { console.log(this === window); // => true return this.name;};const cat = new Cat(’Tom’);console.log(cat.sayCatName()); // undefined

使用傳統(tǒng)的函數(shù)表達(dá)式就能解決問(wèn)題,代碼如下所示:

function Cat(name) { this.name = name;}Cat.prototype.sayCatName = function () { console.log(this === window); // => false return this.name;}const cat = new Cat(’Tom’);console.log(cat.sayCatName()); // Tom

sayCatName 變成普通函數(shù)之后,被調(diào)用時(shí)的執(zhí)行上下文就會(huì)指向新創(chuàng)建的 cat 實(shí)例。

3. 定義事件回調(diào)函數(shù)

箭頭函數(shù)在聲明的時(shí)候就綁定了執(zhí)行上下文,要?jiǎng)討B(tài)改變上下文是不可能的,在需要?jiǎng)討B(tài)上下文的時(shí)候它的弊端就凸顯出來(lái)。

比如在客戶端編程中常見(jiàn)的 DOM 事件回調(diào)函數(shù)(event listenner)綁定,觸發(fā)回調(diào)函數(shù)時(shí) this 指向當(dāng)前發(fā)生事件的 DOM 節(jié)點(diǎn),而動(dòng)態(tài)上下文這個(gè)時(shí)候就非常有用,比如下面這段代碼試圖使用箭頭函數(shù)來(lái)作事件回調(diào)函數(shù)。

const button = document.getElementById(’myButton’);button.addEventListener(’click’, () => { console.log(this === window); // true this.innerHTML = ’Clicked button’;});

在全局上下文下定義的箭頭函數(shù)執(zhí)行時(shí) this 會(huì)指向 window,當(dāng)單擊事件發(fā)生時(shí),this.innerHTML 就等價(jià)于 window.innerHTML,而后者是沒(méi)有任何意義的。

使用函數(shù)表達(dá)式就可以在運(yùn)行時(shí)動(dòng)態(tài)的改變 this,修正后的代碼:

const button = document.getElementById(’myButton’);button.addEventListener(’click’, function () { console.log(this === button); // true this.innerHTML = ’Clicked button’;});4. 定義構(gòu)造函數(shù)

構(gòu)造函數(shù)中的 this 指向新創(chuàng)建的對(duì)象,當(dāng)執(zhí)行 new Car() 的時(shí)候,構(gòu)造函數(shù) Car 的上下文就是新創(chuàng)建的對(duì)象,也就是說(shuō) this instanceof Car === true。顯然,箭頭函數(shù)是不能用來(lái)做構(gòu)造函數(shù), 實(shí)際上 JS 會(huì)禁止你這么做,如果你這么做了,它就會(huì)拋出異常。

比如下面的代碼就會(huì)報(bào)錯(cuò):

const Message = (text) => { this.text = text;};const helloMessage = new Message(’Hello World!’);//報(bào)錯(cuò): Throws 'TypeError: Message is not a constructor'

構(gòu)造新的 Message 實(shí)例時(shí),JS 引擎拋了錯(cuò)誤,因?yàn)?Message 不是構(gòu)造函數(shù)。可以通過(guò)使用函數(shù)表達(dá)式或者函數(shù)聲明來(lái)聲明構(gòu)造函數(shù)修復(fù)上面的例子。

const Message = function(text) { this.text = text;};const helloMessage = new Message(’Hello World!’);console.log(helloMessage.text); // ’Hello World!’

以上就是JavaScript哪些場(chǎng)景不能使用箭頭函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于JavaScript不能使用箭頭函數(shù)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜国产精品视频免费体验区| 日本久久成人网| 国产成人精品亚洲日本在线观看| 日韩动漫一区| 日韩av一区二| 久久精品国产99国产| 欧美一级一区| 国产欧美在线观看免费| 国产精品一级| 精品视频久久| 欧美精品资源| 亚洲先锋成人| 日韩中文字幕不卡| 国产日产高清欧美一区二区三区| 国产精品**亚洲精品| 国产第一亚洲| 欧美日韩一区二区三区视频播放| 悠悠资源网久久精品| 亚洲色图综合| 国产福利亚洲| 国产综合欧美| 欧美有码在线| 日韩三区在线| 欧美午夜三级| 五月天综合网站| 国产情侣久久| 日韩欧美视频专区| 老司机精品久久| 免费在线亚洲欧美| 婷婷亚洲五月| 精品三级av| 免费欧美在线视频| 国产一区二区精品久| 久久亚洲美女| 精品美女在线视频| 久久亚洲一区| 黄在线观看免费网站ktv| 亚洲一级在线| 黄毛片在线观看| 国产亚洲久久| 免费中文字幕日韩欧美| 国产精品大片| 香蕉精品999视频一区二区| 国产成人精品福利| 日韩高清一区| 黄色亚洲在线| 黄色av一区| 日韩中文在线电影| 精品国产精品国产偷麻豆 | 国产精品亚洲综合色区韩国| 999国产精品| 亚洲天堂资源| 麻豆精品蜜桃视频网站| 亚洲成人二区| 蜜桃av.网站在线观看| 精品少妇一区| 美日韩一区二区三区| 日韩精品免费视频人成| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩国产精品一区二区亚洲| 成人免费网站www网站高清| 国产精品13p| av中文资源在线资源免费观看| 精品国产中文字幕第一页| 欧美在线黄色| 国产欧美一区| 精品久久网站| 麻豆精品在线观看| 久久精品999| 国产探花一区在线观看| 日韩av三区| 你懂的国产精品| 日本精品在线中文字幕| 亚洲五月婷婷| 日本亚州欧洲精品不卡| 日韩国产一二三区| 麻豆一区二区三区| 韩国久久久久久| 欧美日韩三区| 日韩高清不卡一区二区| 精品国产黄a∨片高清在线| 亚洲不卡系列| 亚洲午夜免费| 日韩激情啪啪| 国内精品麻豆美女在线播放视频| 日韩精品诱惑一区?区三区| 久久久久国产| 亚洲欧洲日韩精品在线| 国产精品多人| 免费欧美一区| 国产精品久一| 亚洲精品一二三区区别| 欧美一级二区| 在线综合视频| 高清久久一区| 欧美日韩18| 亚洲一区欧美二区| 欧美中文一区| 久久伦理在线| 国产麻豆精品久久| 六月天综合网| 999久久久精品国产| 国产精品一区二区精品视频观看| 亚洲免费高清| 精品欧美一区二区三区在线观看| 日韩美女精品| 国产精品日韩欧美一区| 日本蜜桃在线观看视频| 日韩精品欧美成人高清一区二区| 久久精品影视| 国产盗摄——sm在线视频| 欧美片第1页综合| 中文字幕一区二区三区四区久久 | 欧美成人精品一级| 免费看日韩精品| 亚洲欧美久久久| 国产日韩专区| 亚洲欧洲一区| 婷婷中文字幕一区| 美女久久久久| 欧美福利在线| 精品中文字幕一区二区三区av| av免费不卡国产观看| 国产伦久视频在线观看| 欧美在线首页| 国产精品麻豆成人av电影艾秋| 青青草91久久久久久久久| 亚洲精品日韩久久| 男女男精品视频网| 日韩中文字幕av电影| 亚洲免费网址| 一区二区三区四区日韩| 亚洲免费影院| 国产美女高潮在线观看| 韩国久久久久久| 久久美女精品| 亚洲女同中文字幕| 综合激情在线| 久久精品97| 国产精品亚洲欧美一级在线| 欧美中文高清| 日本一区二区高清不卡| 日韩高清不卡| 亚洲尤物av| 国产乱子精品一区二区在线观看 | 日韩精品一区二区三区中文字幕| 国产精品日本| 国产精品玖玖玖在线资源| av最新在线| 一二三区精品| 国产一区二区三区四区二区| 欧美专区一区| 久久精品av| 亚洲一区二区动漫| 老司机免费视频一区二区| 日韩不卡免费高清视频| 亚洲视频二区| 四虎国产精品免费观看| 三级在线观看一区二区 | 日韩激情视频网站| 天堂av在线| 日韩二区在线观看| 激情婷婷欧美| 久久亚洲精精品中文字幕| 在线视频免费在线观看一区二区| 日本中文字幕一区二区| 蜜桃av在线播放| 亚洲综合中文| 国产精品av久久久久久麻豆网| 日本aⅴ亚洲精品中文乱码| 国产在线成人| 都市激情国产精品| 久久99青青| 日精品一区二区三区| 日韩av首页| 精品视频网站| 国产伦理一区| 91亚洲无吗| 日韩国产精品久久久| 乱人伦精品视频在线观看| 亚洲www免费| 精品久久影院| 日韩精品国产欧美| 国产一区欧美| 亚洲激情五月| 欧美69视频| 国内精品99| 国产v综合v| 日韩免费福利视频| 成人欧美一区二区三区的电影| 国产精品久久久久久久久免费高清| 免费人成网站在线观看欧美高清| 国产韩日影视精品| 中文在线资源| 亚洲女同av| 久久人人97超碰国产公开结果| 亚洲黄色网址| 久久久久久婷| 国产精品99一区二区| 欧美日韩国产免费观看视频|