摘要:關(guān)于提供了一種優(yōu)雅的方式來隱式傳遞一個(gè)對(duì)象引用,因此可以將設(shè)計(jì)得更加簡(jiǎn)潔并且易于復(fù)用。對(duì)于的誤解新手會(huì)誤認(rèn)為指向函數(shù)本身。這時(shí)候,可以使用的方法強(qiáng)制使指向函數(shù)對(duì)象。的綁定和函數(shù)聲明的位置沒有任何關(guān)系,只取決于函數(shù)的調(diào)用方式。
關(guān)于this
this 提供了一種優(yōu)雅的方式來隱式“傳遞”一個(gè)對(duì)象引用,因此可以將API設(shè)計(jì)得更加簡(jiǎn)潔并且易于復(fù)用。
/* *this 隱式傳遞上下文對(duì)象 */ function identify() { return this.name.toUpperCase(); } function speak() { var greeting = "Hello, I am " + identify.call(this); console.log(greeting); } var me = { name: "kelly" } var you = { name: "lucy" } identify.call(me); //KELLY identify.call(you); //LUCY speak.call(me); //Hello, I am KELLY speak.call(you); //Hello, I am LUCY
隨著使用模式越來越復(fù)雜,顯式傳遞上下文對(duì)象會(huì)讓代碼變得越來越亂,使用this則不會(huì)這樣。對(duì)于this的誤解
新手會(huì)誤認(rèn)為this指向函數(shù)本身。
/* *關(guān)于this的誤解 */ function foo(num) { console.log("foo: " + num); this.count++; } foo.count = 0; var i; for (i = 0; i < 10; i++) { if (i > 5) { foo(i); } } console.log(foo.count); //0
由此可見,瀏覽器解析語(yǔ)句產(chǎn)生了4條輸出,證明foo(...)確實(shí)被調(diào)用了4次,但是foo.count仍然是0,顯然從字面意思來理解this是錯(cuò)誤的。 這時(shí)候,可以使用Function.call()的方法強(qiáng)制使this指向foo函數(shù)對(duì)象。
/* *使用function.call()方法使this指向foo函數(shù)對(duì)象。 */ function foo(num) { console.log("foo: " + num); this.count++; } foo.count = 0; for (i = 0; i < 10; i++) { if (i > 5) { foo.call(foo, i) } } console.log(foo.count);this 到底是什么
this是在運(yùn)行時(shí)進(jìn)行綁定的,并不是在編寫時(shí)綁定,它的上下文取決于函數(shù)調(diào)用時(shí)的各種條件。this的綁定和函數(shù)聲明的位置沒有任何關(guān)系,只取決于函數(shù)的調(diào)用方式。 當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)活動(dòng)記錄。這個(gè)記錄會(huì)包含函數(shù)在哪里被調(diào)用、函數(shù)的調(diào)用方式、傳入的參數(shù)等信息。this就是這個(gè)記錄的一個(gè)屬性,會(huì)在函數(shù)執(zhí)行的過程中用到。小結(jié)
學(xué)習(xí)this的第一步是明白this既不指向函數(shù)自身也不指向函數(shù)的詞法作用域,拋開以前錯(cuò)誤的假設(shè)和理解。 this實(shí)際上是在函數(shù)被調(diào)用時(shí)發(fā)生的綁定,它指向什么完全取決于函數(shù)在哪里被調(diào)用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79650.html
摘要:事件事件就是瀏覽器告知程序,用戶的行為,用戶點(diǎn)擊了頁(yè)面中的某個(gè)按鈕或者用戶輸入用戶名或密碼等操作可以稱為事件事件的類型事件根據(jù)使用的場(chǎng)景不同,可以分為如下幾種依賴于設(shè)備的輸入事件鍵盤事件和鼠標(biāo)事件,這些事件都是直接和設(shè)備相關(guān)的獨(dú)立于設(shè)備的輸 事件 事件就是瀏覽器告知JavaScript程序,用戶的行為,用戶點(diǎn)擊了HTML頁(yè)面中的某個(gè)按鈕或者用戶輸入用戶名或密碼等操作可以稱為事件 事件的...
摘要:關(guān)鍵字計(jì)算為當(dāng)前執(zhí)行上下文的屬性的值。毫無疑問它將指向了這個(gè)前置的對(duì)象。構(gòu)造函數(shù)也是同理。嚴(yán)格模式無論調(diào)用位置,只取顯式給定的上下文綁定的,通過方法傳入的第一參數(shù),否則是。其實(shí)并不屬于特殊規(guī)則,是由于各種事件監(jiān)聽定義方式本身造成的。 this 是 JavaScript 中非常重要且使用最廣的一個(gè)關(guān)鍵字,它的值指向了一個(gè)對(duì)象的引用。這個(gè)引用的結(jié)果非常容易引起開發(fā)者的誤判,所以必須對(duì)這個(gè)關(guān)...
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語(yǔ)言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:目錄函數(shù)的聲明函數(shù)的屬性和方法函數(shù)的作用域閉包知識(shí)點(diǎn)小結(jié)關(guān)于函數(shù),可以從以下個(gè)方面去理解首先,數(shù)據(jù)類型上看函數(shù)在中是一種數(shù)據(jù)類型,是對(duì)象的一種其次,從功能上看函數(shù)本質(zhì)上是一段反復(fù)調(diào)用的代碼塊最后,從地位上看函數(shù)在中和其他基本數(shù)據(jù)類型一樣,可 目錄 1.函數(shù)的聲明 2.函數(shù)的屬性和方法 3.函數(shù)的作用域 4.閉包知識(shí)點(diǎn) 5.小結(jié) 關(guān)于函數(shù),可以從以下3個(gè)方面去理解:首先,數(shù)據(jù)類型上看:...
摘要:忍者級(jí)別的函數(shù)操作對(duì)于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對(duì)于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...
閱讀 1152·2021-11-23 10:04
閱讀 2412·2021-11-22 15:29
閱讀 2806·2021-11-19 09:40
閱讀 729·2021-09-22 15:26
閱讀 2129·2019-08-29 16:27
閱讀 2498·2019-08-29 16:10
閱讀 1932·2019-08-29 15:43
閱讀 3285·2019-08-29 12:43