有什么方法可以访问 ES6 Javascript 中的内部抽象操作吗?
Is there any way of accessing internal abstract operations in ES6 Javascript?
ES6 规范指出 abstract operations are not part of the language, but they are used internally. Some of these operations, such as CreateHTML 看起来通常很有用......真的没有办法访问它们吗?没有深入的原型黑客来获得这些功能?
当一个人在描述一种编程语言的语义时/API,确保一切正确且没有歧义是非常重要的。想象一下,现在您正在描述 String.prototype.fontcolor(color)
应该如何工作。这是您需要定义的 API 的一部分,因此您必须严格遵守并开始列出要求:
- 如果字符串为空,则...
- 如果颜色为空,则...
- 如果颜色不是有效颜色,则...
- ...
现在,如果您对多个功能有重复要求,那么您可以概括这些要求,并告诉实施该标准的人将这些要求应用于其他功能(例如 'Requirements 1 and 2 also hold for String.prototype.fontsize
').您可以使用 抽象操作 来定义 public API 操作,而不只是说 'Requirements 1 and 2 also hold for...' 'Call RequirementsForStringPrototypeAcceptingOneArgument and exit if it returns false' 其中 RequirementsForStringPrototypeAcceptingOneArgument 包含请求。 1 和 2.
请注意,这些要求本身并不是 API 的一部分。没有设计成这样,也没有必要这样——只有一种工具可以避免标准中的重复。实现可能真的选择在某个地方有一个 CreateHTML
函数,但如果他们认为更好的话,它也可以只放一堆 if
语句。因此,不,没有办法访问这些操作
- 实现可能一开始就没有这样的功能。
- 实施没有理由公开它们。
- 即使他们确实公开了一些辅助内部函数,他们也没有理由使用标准中提到的名称公开它,或者让它做与标准中完全相同的事情——这都是实现的内部细节。
ES6 规范指出 abstract operations are not part of the language, but they are used internally. Some of these operations, such as CreateHTML 看起来通常很有用......真的没有办法访问它们吗?没有深入的原型黑客来获得这些功能?
当一个人在描述一种编程语言的语义时/API,确保一切正确且没有歧义是非常重要的。想象一下,现在您正在描述 String.prototype.fontcolor(color)
应该如何工作。这是您需要定义的 API 的一部分,因此您必须严格遵守并开始列出要求:
- 如果字符串为空,则...
- 如果颜色为空,则...
- 如果颜色不是有效颜色,则...
- ...
现在,如果您对多个功能有重复要求,那么您可以概括这些要求,并告诉实施该标准的人将这些要求应用于其他功能(例如 'Requirements 1 and 2 also hold for String.prototype.fontsize
').您可以使用 抽象操作 来定义 public API 操作,而不只是说 'Requirements 1 and 2 also hold for...' 'Call RequirementsForStringPrototypeAcceptingOneArgument and exit if it returns false' 其中 RequirementsForStringPrototypeAcceptingOneArgument 包含请求。 1 和 2.
请注意,这些要求本身并不是 API 的一部分。没有设计成这样,也没有必要这样——只有一种工具可以避免标准中的重复。实现可能真的选择在某个地方有一个 CreateHTML
函数,但如果他们认为更好的话,它也可以只放一堆 if
语句。因此,不,没有办法访问这些操作
- 实现可能一开始就没有这样的功能。
- 实施没有理由公开它们。
- 即使他们确实公开了一些辅助内部函数,他们也没有理由使用标准中提到的名称公开它,或者让它做与标准中完全相同的事情——这都是实现的内部细节。