Есть ли способ получить доступ к внутренним абстрактным операциям в ES6 Javascript?

Спецификация ES6 утверждает, что абстрактные операции не являются частью языка, но они используются внутри. Некоторые из этих операций, такие как CreateHTML, выглядят в целом полезными... Нет ли способа получить к ним доступ? Нет глубокого прототипа взломать, чтобы получить на эти функции?

1 ответ

Решение

Когда кто-то описывает семантику языка программирования / API, очень важно сделать все правильно и недвусмысленно. Теперь представьте, что вы описываете, как следует String.prototype.fontcolor(color) Работа. Это часть API, которую вы должны определить, поэтому вы должны быть строгими и начать перечислять требования:

  1. Если строка пуста, то...
  2. Если цвет пуст, то...
  3. Если цвет не является допустимым цветом, то...
  4. ...

Теперь, если у вас есть повторяющиеся требования для нескольких функций, вы можете обобщить эти требования и просто сказать, кто выполняет стандарт, чтобы применить требования к какой-либо другой функции (например, "Требования 1 и 2 также применимы к String.prototype.fontsize '). Вместо того, чтобы просто сказать "Требования 1 и 2 также выполняются для...", вы можете определить общедоступные операции API, используя абстрактную операцию, например "Вызовите RequirementsForStringPrototypeAcceptingOneArgument и выйдите, если он возвращает false", где RequirementsForStringPrototypeAcceptingOneArgument содержит требование 1 и 2.

Обратите внимание, что сами эти требования не являются частью API. Они не предназначены для того, чтобы ими быть, и в них нет необходимости - в стандарте есть всего лишь инструмент, позволяющий избежать повторения. Реализация может действительно хотеть иметь CreateHTML функционировать где-то, но это может так же просто положить кучу if заявления, если они считают это лучше. Таким образом, нет, нет способа получить доступ к этим операциям, так как

  1. Реализация может не иметь такой функции в первую очередь.
  2. Нет причин для реализации выставлять их.
  3. Даже если они действительно представили какую-то вспомогательную внутреннюю функцию, у них нет причины выставлять ее с именем, упомянутым в стандарте, или делать то же самое, что и в стандарте - это все внутренние детали реализации.
Другие вопросы по тегам