TypeScript中的Instanceof是一種類型的護(hù)罩,可根據(jù)類成員身份縮小對(duì)像類型,從而使更安全,更具表現(xiàn)力的多態(tài)性代碼。 1。它檢查對(duì)像是否是類的實(shí)例,並告知編譯器縮小條件塊中的類型,從而消除了對(duì)類型斷言的需求。 2。它可以有效地與類層次結(jié)構(gòu)一起工作,可以在類型縮小類型後訪問(wèn)特定於子類的方法,例如從諸如車(chē)輛(例如車(chē)輛)的共享基類派生時(shí),在car上調(diào)用nonk()或飛機(jī)上的takeoff()。 3。限制包括與接口和對(duì)象文字的不兼容,跨執(zhí)行上下文等跨執(zhí)行上下文的失敗以及原始包裝對(duì)象的不適合性。 4。最佳實(shí)踐包括將實(shí)例與類繼承一起使用,將其與歧視工會(huì)結(jié)合起來(lái),以增強(qiáng)類型的安全性,避免使用普通物體,並在跨文本環(huán)境中謹(jǐn)慎行事。 5。使用帶有標(biāo)記的工會(huì)的實(shí)例的混合方法,例如將成功響應(yīng)與errorresponse區(qū)分開(kāi),可確保運(yùn)行時(shí)檢查和編譯時(shí)類型的安全性。當(dāng)適當(dāng)?shù)貞?yīng)用時(shí),實(shí)例可以增強(qiáng)多態(tài)性場(chǎng)景中的代碼可維護(hù)性和魯棒性。
打字稿中的多態(tài)性不僅涉及繼承或接口,還涉及在運(yùn)行時(shí)編寫(xiě)適應(yīng)不同類型的靈活,安全的代碼。實(shí)現(xiàn)此目的的最實(shí)用的工具之一是類型的後衛(wèi)instanceof
。它可以幫助您以編譯器理解的方式縮小對(duì)像類型的範(fàn)圍,從而使您的代碼更安全,更具表現(xiàn)力。

讓我們分解如何用作類型運(yùn)算符的instanceof
,以及如何在現(xiàn)實(shí)世界中有效使用它。
在打字稿中執(zhí)行什麼instanceof
在其核心上, instanceof
檢查對(duì)像是否是特定類的實(shí)例。但是在打字稿中,它不僅僅是返回布爾值,還可以充當(dāng)類型的後衛(wèi)。當(dāng)在條件中使用時(shí),它告訴編譯器縮小該塊內(nèi)變量的類型。

班狗{ bark(){ console.log(“ Woof!”); } } cat cat { meow(){ console.log(“ Meow!”); } } 功能製造(動(dòng)物:狗|貓){ 如果(狗的動(dòng)物實(shí)例){ Animal.bark(); //?類型被縮小到狗 } 別的 { Animal.Meow(); //?類型狹窄到貓 } }
在這裡,打字稿知道,在if
塊中, animal
必須是Dog
。無(wú)需主張。
將instanceof
與自定義類和繼承一起使用
在多態(tài)性層次結(jié)構(gòu)中, instanceof
真正發(fā)光的地方。假設(shè)您有一個(gè)基類和幾個(gè)派生類:

抽像類車(chē)輛{ 抽象移動(dòng)():void; } 班車(chē)擴(kuò)展車(chē)輛{ 移動(dòng)() { console.log(“道路上的汽車(chē)駕駛”); } Honk(){ console.log(“蜂鳴!”); } } 班級(jí)延長(zhǎng)車(chē)輛{ 移動(dòng)() { console.log(“飛機(jī)在天空中飛行”); } 起飛(){ console.log(“升降機(jī)!”); } }
現(xiàn)在,在處理Vehicle
時(shí),您可以使用instanceof
安全訪問(wèn)特定於亞類的方法:
功能運(yùn)行(車(chē)輛:車(chē)輛){ 車(chē)輛。 //安全:所有車(chē)輛都有移動(dòng)() 如果(汽車(chē)的車(chē)輛實(shí)例){ parter.honk(); //僅在汽車(chē)上可用 } else if(pheres instance of Plane){ 車(chē)輛takeoff(); //僅在飛機(jī)上可用 } }
此模式在事件處理,插件系統(tǒng)或您處理不同但相關(guān)類型的對(duì)象的任何系統(tǒng)中很常見(jiàn)。
局限性和陷阱
雖然instanceof
強(qiáng)大,但它有一些重要的警告:
僅與類或界面或?qū)ο笪淖忠黄鹗褂?/strong>。
接口鳥(niǎo){ fly():void; } const bird = {fly:()=> console.log(“ flage”)}; //?行不通 - 接口在運(yùn)行時(shí)不存在 if(鳥(niǎo)類的實(shí)例){...}
跨執(zhí)行上下文中斷(例如,iframes)。由於每個(gè)上下文都有其自己的全局對(duì)象,因此即使類看起來(lái)相同,
instanceof
也可能失敗。除非您要處理實(shí)際包裝器對(duì)象(這很少見(jiàn)),否則不適用於
String
,Number
等的原始包裝器。
使用instanceof
的最佳實(shí)踐
在避免陷阱的同時(shí),充分利用了instanceof
:
- ?在使用類層次結(jié)構(gòu)和繼承時(shí)使用它。
- ?在可能的情況下將其與歧視工會(huì)結(jié)合起來(lái),以便更強(qiáng)大的類型安全。
- ?避免使用字體檢查普通對(duì)象 - 使用字麵類型的後衛(wèi)或
in
檢查。 - ?在可以在iframe邊界上使用的庫(kù)中要謹(jǐn)慎。
例如,具有歧視聯(lián)盟的混合方法:
類型Apiresponse = SuccessResponse | errorresponse; class SuccessResponse { 構(gòu)造函數(shù)(公共數(shù)據(jù):字符串){} } 類errorresponse { 構(gòu)造函數(shù)(公共錯(cuò)誤:字符串){} } 函數(shù)handleresponse(res:successResponse | errorresponse){ if(res instance of SuccessResponse){ console.log(“成功:”,res.data); } 別的 { console.log(“錯(cuò)誤:”,res.error); } }
這為您提供了運(yùn)行時(shí)檢查和編譯時(shí)安全性。
概括
instanceof
是一種可靠的內(nèi)置方式,可以在處理Typescript中的類實(shí)例時(shí)執(zhí)行類型縮小。它通過(guò)讓您根據(jù)實(shí)際運(yùn)行時(shí)類型編寫(xiě)適應(yīng)邏輯來(lái)支持多態(tài)性行為,同時(shí)使編譯器通知。
這不是一個(gè)千篇一律的解決方案,即將上課,當(dāng)心跨文本問(wèn)題,並考慮諸如非類型類型的標(biāo)記工會(huì)之類的替代方案。
明智地使用的是, instanceof
使您的多態(tài)代碼清潔器,更安全且易於維護(hù)。
以上是掌握多態(tài)性:'實(shí)例”類型操作員的實(shí)用指南的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

Thespaceshipoperator()inPHPreturns-1,0,or1basedonwhethertheleftoperandislessthan,equalto,orgreaterthantherightoperand,makingitidealforsortingcallbacks.2.Itsimplifiesnumericandstringcomparisons,eliminatingverboseif-elselogicinusort,uasort,anduksort.3.

theunionoperator()comminesArraysByByPreservingKeySandEwertheleftArray'svalueSonKeyConflicts,MakeitiTIDealForsetTingDefaults; 2. booseEquality(==)checksifarrayshavethesmekey-valuepairsepordectientity(==)

使用===而非==是避免PHP類型轉(zhuǎn)換陷阱的關(guān)鍵,因?yàn)?==同時(shí)比較值和類型,而==會(huì)進(jìn)行類型轉(zhuǎn)換導(dǎo)致意外結(jié)果。 1.==在類型不同時(shí)會(huì)自動(dòng)轉(zhuǎn)換,例如'hello'被轉(zhuǎn)為0,因此0=='hello'為true;2.===要求值和類型都相同,避免了此類問(wèn)題;3.在處理strpos()返回值或區(qū)分false、0、''、null時(shí)必須使用===;4.儘管==可用於用戶輸入比較等場(chǎng)景,但應(yīng)優(yōu)先顯式類型轉(zhuǎn)換並使用===;5.最佳實(shí)踐是默認(rèn)使用===,避免依賴==的隱式轉(zhuǎn)換規(guī)則,確保代碼行為一致可靠。

Pre-increment( $i)incrementsthevariablefirstandreturnsthenewvalue,whilepost-increment($i )returnsthecurrentvaluebeforeincrementing.2.Whenusedinexpressionslikearrayaccess,thistimingdifferenceaffectswhichvalueisaccessed,leadingtopotentialoff-by-oneer

PHP的=&操作符創(chuàng)建變量引用,使多個(gè)變量指向同一數(shù)據(jù),修改一個(gè)會(huì)影響另一個(gè);2.其合法用途包括從函數(shù)返回引用、處理遺留代碼及特定變量操作;3.但易引發(fā)循環(huán)後引用未釋放、意外副作用和調(diào)試?yán)щy等問(wèn)題;4.現(xiàn)代PHP中對(duì)象默認(rèn)以引用句柄傳遞,數(shù)組和字符串採(cǎi)用寫(xiě)時(shí)復(fù)制,性能優(yōu)化已無(wú)需手動(dòng)引用;5.最佳實(shí)踐是避免普通賦值中使用=&,循環(huán)後及時(shí)unset引用,僅在必要時(shí)使用參數(shù)引用並做好文檔說(shuō)明;6.絕大多數(shù)情況下應(yīng)優(yōu)先採(cǎi)用更安全清晰的對(duì)象導(dǎo)向設(shè)計(jì),=&僅在極少數(shù)明確需要時(shí)謹(jǐn)慎使用

Combinedassignmentoperatorslike =,-=,and=makecodecleanerbyreducingrepetitionandimprovingreadability.1.Theyeliminateredundantvariablereassignment,asinx =1insteadofx=x 1,reducingerrorsandverbosity.2.Theyenhanceclaritybysignalingin-placeupdates,makingop

Inlanguagesthatsupportboth,&&/||havehigherprecedencethanand/or,sousingthemwithassignmentcanleadtounexpectedresults;1.Use&&/||forbooleanlogicinexpressionstoavoidprecedenceissues;2.Reserveand/orforcontrolflowduetotheirlowprecedence;3.Al

executionOperatorInphp,代表bybackticks(`),runsshellCommandSandReturnsTheIrtheIruoTputAsstring,equivalentToshell_exec()。 2. ItMaybeusedInRareCasesLikeCallingSystemtools(例如Pdftotext,ffmpeg),InterfacingwithCli-lyscripts,orserververadministrationvi
