【问题标题】:Two colons before the array`s toString() method数组的 toString() 方法前的两个冒号
【发布时间】:2019-03-22 16:21:56
【问题描述】:

toString() 方法调用前的两个冒号是什么意思?

例如,我找到了以下代码:

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

['status'].toString().call(orderXml.ns);一样吗?

我正在使用上面的 Demandware 脚本。

谢谢。

【问题讨论】:

  • 问题中的代码是无效的 JavaScript 语法。
  • @T.J.Crowder,你怎么能证明这一点?谢谢。
  • @Xufox,关于我的工作。谢谢。
  • @YaroslavTrofimov - 通过尝试使用 JavaScript 引擎解析它:jsfiddle.net/da4ph6kj
  • @YaroslavTrofimov 证明这一点很简单 - 在控制台中输入它会出错。

标签: function multiple-columns bind demandware salesforce-commerce-cloud


【解决方案1】:

在 Demandware Script 中,您会发现一个长期弃用的概念称为 E4X,它扩展了 JavaScript 1.6/ES3 语法。但是,现在不鼓励使用它。您可以在此处找到此语法的一些文档:https://developer.mozilla.org/en-US/docs/Archive/Web/E4X/Processing_XML_with_E4X

在您提供的脚本 sn-p 中,冒号用于标识以下表达式的 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 使用 Mozilla Rhino 1.7R5 JavaScript 实现的修改版本。在此处查看特征矩阵:https://mozilla.github.io/rhino/compat/engines.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多