Два двоеточия перед методом toString() массива

#function #multiple-columns #bind #demandware #salesforce-commerce-cloud

#функция #многоколоночный #привязать #требуемое программное обеспечение #salesforce-коммерция-облако

Вопрос:

Что означают два двоеточия перед toString() вызовом метода?

Например, я нашел следующий код:

 orderXml.ns::['status'].toString();
  

Это то же самое, что ['status'].toString().call(orderXml.ns); ?

Я использую приведенный выше скрипт Demandware.

Спасибо.

Комментарии:

1. Код в вопросе является недопустимым синтаксисом JavaScript.

2. @T.J.Crowder, как ты мог бы это доказать? Спасибо.

3. @Xufox, о моей работе. Спасибо.

4. @YaroslavTrofimov — Пытаясь разобрать его с помощью движка JavaScript: jsfiddle.net/da4ph6kj

5. @YaroslavTrofimov доказать это тривиально — введите это в консоли, и вы получите сообщение об ошибке.

Ответ №1:

В скрипте Demandware вы обнаружите, что давно устаревшая концепция под названием E4X, которая расширяет синтаксис JavaScript 1.6 / ES3, все еще существует. Однако теперь его использование не рекомендуется. Вы можете найти некоторую документацию для этого синтаксиса здесь: https://developer.mozilla.org/en-US/docs/Archive/Web/E4X/Processing_XML_with_E4X

В предоставленном вами фрагменте сценария двоеточия используются для идентификации пространства имен XML следующего выражения. Без этого пространства имен вы можете обнаружить, что указана ссылка на неправильный объект, или вы можете получить неопределенную ссылку. Смотрите конкретную область архива документации, связанную выше, которая относится к пространствам имен: https://developer.mozilla.org/en-US/docs/Archive/Web/E4X/Processing_XML_with_E4X#Handling_namespaces

По сути, код ищет свойство объекта с именем: status . На самом деле это не обозначение массива, как кажется при беглом просмотре. В частности, он ищет свойство с пространством имен. Это было бы не то же самое, что вызывать:

 ['status'].toString().call(orderXml.ns);
  

.toString() Метод используется для того, чтобы гарантировать, что мы получим String представление свойства, а не ссылку на экземпляр этого XML-узла.

Пожалуйста, обратите внимание, что Demandware использует модифицированную версию реализации JavaScript Mozilla Rhino 1.7R5. Смотрите матрицу функций здесь: https://mozilla.github.io/rhino/compat/engines.html