Javascript 报错 Uncaught TypeError: x is not a function 常见错误总结

31 篇文章 0 订阅

这是我近期犯的比较傻的一个错误,一定要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 欢迎补充

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值