ES6类中定义箭头函数形式move方法出现语法错误求助
解决ES6类中
move方法的语法错误问题 嘿,我来帮你搞定这个Uncaught SyntaxError: Unexpected token =的错误!
你遇到的问题根源在于:你写的move = (direction) => {}这种箭头函数赋值的类方法写法,并不是ES6的标准语法——它属于后来的ES2022类字段提案(Class Fields Proposal)里的特性。如果你的运行环境(比如旧版本浏览器、未配置转译的Node.js)不支持这个提案语法,就会抛出语法错误。
下面给你两种可行的解决思路:
方法1:使用标准ES6类方法写法
这是最兼容的方式,采用ES6原生支持的类方法定义,要是担心this指向问题(比如把move作为回调函数传递时),可以在构造函数里手动绑定this:
class Personnage { constructor(direction) { this.x = 0 this.y = 200 this.direction = direction // 手动绑定this,确保move方法里的this始终指向当前类实例 this.move = this.move.bind(this); } // 标准ES6类方法定义 move(direction) { let coord = { 'x': this.x, 'y': this.y }; switch (direction) { case DIRECTION.GAUCHE: coord.x-- console.log('gauche') break; case DIRECTION.DROITE: coord.x++ console.log('dro...') } } }
方法2:保留箭头函数写法(需环境支持)
如果你想继续用箭头函数自动绑定this的特性,那需要确保你的运行环境支持ES2022及以上的语法,或者使用转译工具(比如Babel)将代码转译为兼容旧环境的版本。现代浏览器(Chrome 74+、Firefox 67+)和Node.js 12+已经原生支持类字段语法,此时你的原始代码就能正常运行:
class Personnage { constructor(direction) { this.x = 0 this.y = 200 this.direction = direction } // 类字段语法:箭头函数方法(需环境支持) move = (direction) => { let coord = { 'x': this.x, 'y': this.y }; switch (direction) { case DIRECTION.GAUCHE: coord.x-- console.log('gauche') break; case DIRECTION.DROITE: coord.x++ console.log('dro...') } } }
简单总结一下:如果要兼容更多旧环境,选方法1;如果环境足够新或者能配置转译,方法2也完全没问题。
内容的提问来源于stack exchange,提问作者Kérian Pelat
相关产品推荐
相关产品推荐

