【问题标题】:Is there any way of accessing internal abstract operations in ES6 Javascript?有没有办法访问 ES6 Javascript 中的内部抽象操作?
【发布时间】:2017-11-12 10:12:19
【问题描述】:

ES6 规范声明abstract operations 不是语言的一部分,但它们在内部使用。其中一些操作,例如CreateHTML 看起来通常很有用......真的没有办法访问它们吗?没有深入的原型黑客来获得这些功能?

【问题讨论】:

  • 可能是“在本规范中定义了其他更专业的抽象操作。”更适合您的特定需求。

标签: javascript ecmascript-6 prototype abstract


【解决方案1】:

在描述一种编程语言/API 的语义时,确保一切正确且不含糊是非常重要的。现在想象一下,您正在描述String.prototype.fontcolor(color) 应该如何工作。这是您需要定义的 API 的一部分,因此您必须严格遵守它并开始列出要求:

  1. 如果字符串为空,则...
  2. 如果颜色为空,则...
  3. 如果颜色不是有效颜色,则...
  4. ...

现在,如果您对多个功能有重复要求,那么您可以概括这些要求,并告诉实施标准的人将要求应用于其他功能(例如,'要求 1 和 2 也适用于 String.prototype.fontsize ')。您可以使用 abstract operation 来定义公共 API 操作,而不仅仅是说“要求 1 和 2 也适用于...”,例如'调用RequirementsForStringPrototypeAcceptingOneArgument 并在返回false 时退出' 其中RequirementsForStringPrototypeAcceptingOneArgument 包含req。 1 和 2。

请注意,这些要求本身并不是 API 的一部分。没有设计成这样,也没有必要这样 - 只有一个工具可以避免标准中的重复。实现可能真的选择在某处使用CreateHTML 函数,但如果他们认为更好,它也可以只放置一堆if 语句。因此,不,没有办法访问这些操作

  1. 实现可能一开始就没有这样的功能。
  2. 实施没有理由公开它们。
  3. 即使他们确实公开了一些辅助内部函数,他们也没有理由使用标准中提到的名称公开它,或者让它做与标准中完全相同的事情 - 这都是实现的内部细节。李>

【讨论】:

  • 谢谢你这么清楚的回答!您描述的现实使我得出结论,该规范有点弱。基于 CreateHTML 抽象的函数集是有限的(也许是正确的)并且有些没有用,例如古老的 blink()。就在最近,我编写了自己的通用函数,用于将内容包装在 HTML 标记中;当然,本地解决方案会更好。无论如何,这是一个旁白 - 再次感谢。
  • @Theod'Or 所有创建 html 字符串的字符串方法都是古老且已弃用的。它们列在附件 B 中,仅作为关于如何确保网络兼容性的建议。
  • @Bergi 我知道,但我很谨慎,以防有人跳到我身上说 fontColor() 或任何其他人在 HTML 4 中仍然可以使用时没有用。我认为弃用这些函数只会使通用 CreateHTML() 的情况更强大。
  • @Theod'Or 在 ECMAScript 中不推荐使用它们的原因是因为它们不适合 语言。它们可能在某些环境中有用,但并非无处不在——它们不应该是通用语言字符串接口的一部分。 (一些环境仍然为此目的提供本机函数,例如任何浏览器中的 DOM API)。但是,这是 CreateHTML 特有的,您还想到了哪些其他内部结构?
猜你喜欢
  • 2023-04-08
  • 2016-03-31
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2021-10-11
相关资源
最近更新 更多