代码之家  ›  专栏  ›  技术社区  ›  manymanymore

数组的toString()方法前面有两个冒号

  •  -1
  • manymanymore  · 技术社区  · 6 年前

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

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

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

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

    非常感谢。

    0 回复  |  直到 6 年前
        1
  •  3
  •   sholsinger    6 年前

    在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使用了Mozilla Rhino 1.7R5 JavaScript实现的修改版本。请参见此处的特征矩阵: https://mozilla.github.io/rhino/compat/engines.html