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

在类内部原型化函数时出现Unknown token '.'错误求助

问题排查:类定义中prototype赋值导致的语法错误

嘿,我来帮你拆解下这个问题——你碰到的Unknown token '.'错误,核心原因是类体内部的语法规则不允许直接用A.prototype来添加方法,咱们一步步理清楚:

错误根源

你把类表达式和原型方法赋值的写法混在一起了:

var A = class { 
  constructor(an){ this.a = an; } 
  tick(){ a(); } 
  A.prototype.p0 = function(){ console.log('p0'); } // 这行是问题所在!
};

在类的内部(class {}的大括号范围内),只能定义构造函数、类方法(包括实例方法、静态方法),不能直接写A.prototype.xxx = ...这种赋值语句——这完全不符合类语法的解析规则,浏览器会把它当成非法的语法结构,所以抛出了Unknown token '.'错误。另外补充一点:类表达式在完成定义前,变量A其实还没被赋值,这时候引用A本身也存在变量提升层面的问题。

两种修正方案

根据你的需求,给你两种正确的写法:

方案1:在类内部直接定义实例方法(推荐)

类语法本身就支持直接在类体里定义原型方法,这是最规范的写法:

var A = class { 
  constructor(an){ this.a = an; } 
  tick(){ this.a(); } // 顺便提下:原代码里的a()应该是this.a()吧?不然会找全局变量a
  p0(){ console.log('p0'); } // 直接定义,自动挂载到A.prototype上
};

方案2:在类外部添加原型方法

如果你一定要用prototype的方式添加方法,需要把赋值语句放到类定义的外面:

var A = class { 
  constructor(an){ this.a = an; } 
  tick(){ this.a(); }
};
// 类定义完成后,再给原型追加方法
A.prototype.p0 = function(){ console.log('p0'); };

额外小提醒

原代码里的tick(){ a(); }应该是想调用实例的a属性吧?这里要写成this.a(),不然会去全局作用域找a函数,大概率会触发未定义的错误哦。

内容的提问来源于stack exchange,提问作者F. Kraus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:33:44