Javascript 报错 Uncaught TypeError: x is not a function 常见错误总结
這是我近期犯的比較傻的一個錯誤,一定要mark一下。
以下代碼段是借用父類構造函數來實現繼承的一種方法,
不過在ES6已經可以使用類了,這個作為了解對閱讀以前的代碼還是有好處的。
代碼非常簡單,
1 定義一個父類構造函數,具有姓名、年齡兩個屬性。
2 利用原型對象定義公用方法sing。(不了解的可以看一下原型鏈的相關知識)
3 定義子類構造函數,并利用call繼承父類特性。
4 利用父類的新實例對象賦值給子類原型對象,從而獲得父類方法。
5 定義一個新子類實例對象son2,并使用父類方法sing。
然后報錯了,Uncaught TypeError: son2.sing is not a function。意思說son2.sing不是一個函數,可是檢查了幾遍函數沒寫錯呀。
<script>function Father(name,age){this.name=name;this.age=age;}Father.prototype.sing = function() {console.log("你好");}function son(name,age){Father.call(this,name,age);son.prototype=new Father();son.prototype.constructor=son;}var son2= new son();son2.sing();</script>但其實錯誤很明顯,定義公用方法以及對原型對象的賦值不能放在構造函數里邊,所以把子類部分的原型對象部分提出來:
function son(name,age){Father.call(this,name,age);}son.prototype=new Father();son.prototype.constructor=son;var son2= new son();son2.sing();報錯就解決了。
?
當然這個報錯不一定都是這個情況。如果你的問題和我的不一樣,還有幾種可能:
1 函數名寫錯了,檢查一下有沒有拼寫錯誤。
2 有重復命名的板塊,系統使用了不包含這個報錯函數的板塊。如這位朋友:
https://blog.csdn.net/shruber/article/details/79205295?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
3 變量和函數命名重復,而函數的命名優先級比變量高。
https://blog.csdn.net/weixin_40345099/article/details/82912474
4 歡迎補充
?
總結
以上是生活随笔為你收集整理的Javascript 报错 Uncaught TypeError: x is not a function 常见错误总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非共识大会 | 伍鸣博士:DApp发展需
- 下一篇: Java纯后端生成PDF格式报表的三种方