【问题标题】:Is there a way to assign an ES5.1 class an anonym function?有没有办法为 ES5.1 类分配一个匿名函数?
【发布时间】:2021-11-29 04:17:51
【问题描述】:

我正在尝试为我正在处理的项目实现 ANTLR4,并使用 ANTLR4 工具为 JavaScript 创建了 Python3 解析器。问题是当我尝试运行代码时,会出现以下错误: TypeError: Assignment to constant variable.

TypeError: Assignment to constant variable.

这段代码如下: Assignment

      let old_lexer = Python3Lexer;
      Python3Lexer = function () {
        old_lexer.apply(this, arguments);
        this.reset.call(this);
      }

Python3Lexer 是一个类。

我正在使用 ANTLR 4.9.2 和 ECMAScript 5.1(但我真的不知道这个是否在运行,也许它是默认版本)。

我真的不明白那个作业是什么意思,我也不知道它是否可以用其他方式来写。

提前致谢。

【问题讨论】:

  • 请在您的问题中包含相关代码sn-ps,而不是包含外部图片。
  • @WiktorZychla 谢谢你,我已经添加了代码,不便之处敬请见谅。
  • Python3Lexer 是如何创建的?是JS类吗?
  • @yccteam 我认为它是一个 JS 类,但实现使用 ES(我对 ES 不是很熟悉 :( 但 ANTLR4 的文档说它使用 ES5.1)。声明是如下: export default class Python3Lexer extends antlr4.Lexer { .. constructor(input) { ... let old_lexer = Python3Lexer; Python3Lexer = function () { ... } .. Python3Lexer.prototype.emitToken = function(token) { this._token = token; this.token_queue.push(token); }; .. } .. }
  • @Daltimus 你的意思是代码被转译成ES5.1吗?可能class 语法被转换为类似:const Python3Lexer = function() {}。您可以访问转译的代码吗?

标签: javascript antlr4 ecmascript-5


【解决方案1】:

使用 ANTLR 4.9.x,JavaScript 目标生成 EcmaScript 6 源代码,必须转译为 EcmaScript 5(Documentation for the JavaScript target 建议使用 WebPack 并有使用说明。)JavaScript 运行时有一个 webpack.config.js帮忙。这对于将在 EcmaScript 5.x 运行时下运行的输出是必需的。 (classlet 等都是 ES6 特定的)。

【讨论】:

  • 非常感谢@Mike!我会尝试这种方式。我不知道“转译”的概念,我对此很陌生。非常感谢您与我分享您的知识:D。
猜你喜欢
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2020-01-09
  • 2011-02-13
  • 1970-01-01
  • 2011-03-24
  • 2012-05-25
相关资源
最近更新 更多