Vanilla JS中使用Prototype出现Is not a function错误求助
问题分析与解决
你报错的核心原因是调用方式错误:你把挂载在Pendejo.prototype上的原型方法show(),当成了构造函数Pendejo的静态方法来调用。
关键区别:
- 原型方法(挂载在
prototype上):只能通过构造函数创建的实例对象调用,方法内部的this指向当前实例,能访问实例的属性(比如this.nickname)。 - 静态方法(直接挂载在构造函数上):只能通过构造函数本身调用,无法直接访问实例属性。
修正方案一(用实例调用原型方法,符合原代码设计)
把Pendejo.show()改成实例ryu调用:
function Pendejo(nickname, edad, pendejo) { this.nickname = nickname; this.edad = edad; this.pendejo = pendejo; } Pendejo.prototype.show = function() { return `Soy ${this.nickname} y soy ${this.pendejo}% pendejo`; } let ryu = new Pendejo('Ryu', 22, 100); console.log(ryu.show()); // 输出:Soy Ryu y soy 100% pendejo
修正方案二(如果需要静态方法)
如果确实想通过Pendejo.show()调用,需要把方法直接挂载在构造函数上(但这种方式无法直接访问实例的nickname等属性,除非传入实例):
function Pendejo(nickname, edad, pendejo) { this.nickname = nickname; this.edad = edad; this.pendejo = pendejo; } // 定义静态方法 Pendejo.show = function(instance) { return `Soy ${instance.nickname} y soy ${instance.pendejo}% pendejo`; } let ryu = new Pendejo('Ryu', 22, 100); console.log(Pendejo.show(ryu)); // 输出:Soy Ryu y soy 100% pendejo
内容的提问来源于stack exchange,提问作者Occsy
相关产品推荐
相关产品推荐

