在类内部原型化函数时出现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
相关产品推荐
相关产品推荐

