1. 程式人生 > >TS/JS錯誤:TypeError: Cannot read property 'prototype' of undefined

TS/JS錯誤:TypeError: Cannot read property 'prototype' of undefined

總結一下解決這個錯誤的引起和過程。
錯誤資訊:TypeError: Cannot read property ‘prototype’ of undefined
開發語言:TypeScript
編譯後語言:JavaScript
開發工具:LayaAir

今天在除錯一個新寫的框架的時候,突然出現這個問題。
一般情況下,出現這個問題,是缺乏相應的js檔案,但是看了一下html檔案,發現相關的js檔案都有配置相應的

<script src="js/test/LoginHelper.js"></script>
<script src="js/legend/laya/Helper.js"
>
</script>

其中Helper是基類。
平時很少遇到這個問題,正常情況下LayaAir這個IDE是會自動幫我們插入一個新寫TS類生成的js檔案。
看了一下index.html檔案,發現這兩個檔案都寫,只是沒有按照繼承關係的順序來。
仔細看了一下其他的js檔案,發現都是有按照類的繼承關係來插入js檔案的。
同時也關注了一下

<!--jsfile--startTag-->
<!--jsfile--endTag-->

這個標籤段也確實是會自動插入新建的TS類的。對比一下其他類,發現可以之所以亂序了,是因為TS類採用了泛型的寫法
基類 View

export class View<M extends IModel> extends BasicView<Laya.Sprite,M>

子類LoginView

export class LoginView extends mvc.View<mvc.IModel>

然後嘗試把泛型程式碼去掉

export class View extends BasicView
export class LoginView extends mvc.View

結果LayaAir是可以正常地在index.html對這兩個類的js檔案進行排序。
如果不能使用泛型,那TypeScirpt的強大功能無疑是減弱很多了。
懷疑是LayaAir IDE的bug,急忙在臘鴨的大群上反饋下這個問題
結果客服人員回答說暫時還不支援泛型,沒辦法了。
最後的解決方法,是把一些不能排序或者一定是先載入js程式碼放在別的標籤,手動排序

<!--jsfile--Custom-->

最後問題得以解決,專案也正常跑起來了