You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:10:04