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 欢迎补充

 


版权声明:本文为weixin_41790566原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。