成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:120日期:2023-10-01 13:45:02
1. 定義對象方法

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

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();//報錯:Uncaught TypeError: Cannot read property ’reduce’ of undefined at Object.sum

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

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

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ù)會導(dǎo)致運行時的執(zhí)行上下文錯誤。比如下面代碼:

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ù)表達式就能解決問題,代碼如下所示:

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)用時的執(zhí)行上下文就會指向新創(chuàng)建的 cat 實例。

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

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

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

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

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

使用函數(shù)表達式就可以在運行時動態(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)建的對象,當(dāng)執(zhí)行 new Car() 的時候,構(gòu)造函數(shù) Car 的上下文就是新創(chuàng)建的對象,也就是說 this instanceof Car === true。顯然,箭頭函數(shù)是不能用來做構(gòu)造函數(shù), 實際上 JS 會禁止你這么做,如果你這么做了,它就會拋出異常。

比如下面的代碼就會報錯:

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

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

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

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

標(biāo)簽: JavaScript
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
av毛片久久久久**hd| 国产一区二区看久久| 亚洲人成网站影音先锋播放| 国产福利精品导航| 久久一区二区三区四区五区| 亚洲国产精品传媒在线观看| 91首页免费视频| 欧美亚洲精品一区| 中文字幕一区二区在线播放| 国产精品88888| 久久综合狠狠综合久久综青草| 国产婷婷色一区二区三区四区 | 欧美日韩三区| 日韩一二三区不卡| 日韩av一二三| 国产乱码精品一区二区三区不卡| 国产精品女主播在线观看| 成人教育av在线| 欧美区一区二区三区| 亚洲一区二区视频| 欧美另类女人| 亚洲精品一区二区三区在线观看| 韩国v欧美v亚洲v日本v| 国产精品一区毛片| 亚洲欧洲99久久| 欧美一区综合| 欧美mv日韩mv亚洲| 国产电影精品久久禁18| 欧美午夜片在线观看| 亚洲一区视频在线| 精品成人一区| 久久精品人人做人人综合| 国产美女一区二区三区| 91福利精品视频| 亚洲综合精品久久| 欧美日韩精品伦理作品在线免费观看| 日韩欧美成人一区二区| 国产一区二区三区视频在线播放| 欧洲视频一区二区| 午夜视频在线观看一区二区| 在线综合欧美| 一二三区精品视频| 一区二区福利| 亚洲男人的天堂一区二区| 激情综合激情| 国产精品毛片无遮挡高清| 欧美成人高清| 国产亚洲精品久| 91性感美女视频| 久久久一区二区| 91免费观看在线| 日韩欧美久久久| 国产东北露脸精品视频| 777色狠狠一区二区三区| 黄一区二区三区| 欧美优质美女网站| 天堂一区二区在线| 欧美资源在线| 亚洲高清一区二区三区| 午夜亚洲性色视频| 亚洲国产aⅴ天堂久久| 在线亚洲欧美| 亚洲高清一区二区三区| 欧美亚洲自偷自偷| 亚洲h动漫在线| 一本久道综合久久精品| 国产精品毛片高清在线完整版| 欧美精品啪啪| 国产精品亲子伦对白| 欧美日韩高清在线一区| 欧美色综合网站| 国产精品资源网| 欧美电影免费提供在线观看| 北岛玲一区二区三区四区| 欧美α欧美αv大片| av在线不卡电影| 国产日韩欧美精品电影三级在线| 91天堂素人约啪| 亚洲国产精品99久久久久久久久| 欧美日韩精品一区| 亚洲欧美欧美一区二区三区| 99久久777色| 中文字幕精品综合| 黄色综合网站| 亚洲综合色噜噜狠狠| 日本乱人伦一区| 国产一区激情在线| 日韩丝袜情趣美女图片| 99国产精品久久久久久久久久| 国产日韩欧美精品综合| 一区视频在线看| 午夜精品免费在线| 欧美日韩和欧美的一区二区| 懂色av一区二区三区蜜臀| 欧美激情一区二区三区四区| 最新亚洲一区| 日本一道高清亚洲日美韩| 欧美日韩dvd在线观看| aaa国产一区| 亚洲色图色小说| 久热精品视频| 高清免费成人av| 国产农村妇女毛片精品久久麻豆 | 久久性天堂网| 国产精品羞羞答答xxdd| 久久网这里都是精品| 亚洲福利av| 蜜桃av一区二区三区电影| 欧美mv日韩mv国产网站app| 欧美日本中文| 日韩主播视频在线| 亚洲欧美亚洲| 亚洲激情第一区| 欧美日韩一区二区三区免费看| 国产精品一区二区久久精品爱涩| 久久综合九色综合欧美就去吻| 亚洲国产1区| 男人的天堂久久精品| 精品国产一区二区三区四区四| 亚洲性图久久| 日本亚洲电影天堂| 日韩一区二区三区精品视频| 伊人久久成人| 另类欧美日韩国产在线| 国产亚洲短视频| 欧美日韩亚洲在线| 亚洲国产精品人人做人人爽| 日韩一区二区免费在线电影| 99re66热这里只有精品4| 国产美女精品一区二区三区| 中文字幕一区三区| 欧美综合一区二区三区| 成人国产视频在线观看| 一区二区三区精密机械公司| 91精品国产综合久久婷婷香蕉| 亚洲欧洲精品一区二区| 国产精品一区二区久久精品爱涩| 亚洲女女做受ⅹxx高潮| 制服丝袜日韩国产| 99国产精品自拍| 国产精品亚洲第一区在线暖暖韩国| 亚洲欧美一区二区三区孕妇| 欧美一区二区三区思思人| 99精品国产高清一区二区 | 99精品国产91久久久久久| 午夜精品爽啪视频| 久久久久久久久久久久久久久99| 日本韩国精品一区二区在线观看| 欧美成人高清| 久久99精品久久久久久久久久久久| 国产精品国产自产拍高清av | 视频在线观看一区| 日韩视频在线你懂得| 激情欧美国产欧美| 国产在线一区二区| 国产精品久久久久永久免费观看| 欧美午夜电影网| 亚洲精品护士| 国产成人精品免费一区二区| 男女男精品视频网| 椎名由奈av一区二区三区| 日韩一区二区在线观看视频播放| 亚洲综合欧美| 欧美日韩调教| 国内精品嫩模私拍在线| 亚洲成人在线网站| 久久久久国产精品免费免费搜索| 精品视频一区二区不卡| 国产伦精品一区二区三区四区免费 | 黄色亚洲在线| 国产99久久久国产精品免费看| 亚洲成人免费看| 国产精品久久久久久久岛一牛影视 | 成人蜜臀av电影| 久久机这里只有精品| 亚洲午夜电影在线| 欧美videos中文字幕| 日本高清成人免费播放| 亚洲高清123| 99久久久久久| 亚洲韩国精品一区| 久久久久国产精品厨房| 欧美精品一二三| 亚洲综合日本| 好看的亚洲午夜视频在线| 99vv1com这只有精品| 国产精品久久久久久久蜜臀| 日韩av不卡一区二区| 蜜芽一区二区三区| 免费人成精品欧美精品| 精品日韩一区二区三区| 国产精品久久久久精k8| 色8久久精品久久久久久蜜| 亚洲国产裸拍裸体视频在线观看乱了中文 | 一区二区三区精品视频在线| 国产亚洲一区字幕| 日韩精品一区二区三区中文精品| 欧美日韩亚洲丝袜制服| 一本在线高清不卡dvd| 一区二区不卡在线视频 午夜欧美不卡'|