【问题标题】:What does ‘::’ (double colon) do in javascript for events?'::'(双冒号)在 javascript 中对事件有什么作用?
【发布时间】:2011-04-19 10:53:05
【问题描述】:

我看到了这段代码,我摸不着头脑,试图确定它是如何工作的。

<SCRIPT LANGUAGE=javascript> 

     function SpeechMikeControl::SPMEventButton(lDeviceID, EventId) {
        alert("lDeviceID=" + lDeviceID + ", EventId=" + EventId);
     }

</SCRIPT>

双冒号?这是使用来自网页的飞利浦语音麦克风。

知道这个双冒号是什么意思吗?对我来说这似乎是一个语法错误,但它有效! (至少在 IE 中)。

【问题讨论】:

  • 不是骗子。我找到了另一个链接。这与我的问题无关。
  • 我不明白为什么它不是一个副本。您上面的代码 sn-p 也给出了语法错误
  • 它在什么 IE 中工作?至少在 IE8 中没有。
  • 我同意这不是一个重复——这两个问题都可能询问 JS 中的双冒号,但两者的语法用法有很大不同。

标签: javascript jscript


【解决方案1】:

我在Microsoft Office Infopath 2003 的一些扫描手册中找到了一个晦涩的参考。它似乎是JScript 语法:

双冒号用作分隔符 在脚本 ID 和事件之间 名字

我的猜测是这不是 Internet Explorer 的 ECMAScript 实现的一部分(或不再是一部分),但它属于(或曾经属于)Microsoft Office 的实现。

【讨论】:

  • 谢谢。这似乎是对的。我猜 IE 在看到这个结构时会退回到 JScript。
  • 更相关的参考是Scripting Events,这里的语法如this 回答中所述。
【解决方案2】:

这是 Microsoft 实现的 Javascript 语言的扩展。其目的是为页面上引用的 COM 对象指定事件处理程序。 SpeechMikeControl 是 COM(和/或 ActiveX)对象的全局范围名称:

  • 带有OBJECT 或其他一些元素,其id 属性为SpeechMikeControl,或者
  • 一个全局变量 SpeechMikeControl 之前在 Javascript 中的某处声明

SPMEventButton 是由SpeechMikeControl 对象在谁知道什么情况下引发的 COM 事件的名称。

双冒号是将函数体作为处理程序连接到控件事件的指令。

【讨论】:

    【解决方案3】:

    肯定是语法错误

    【讨论】:

    • @Dan 它不起作用。由于某种原因,您只是没有看到错误。也许 IE 隐藏了它们 - 注意 IE8 左下角的黄色感叹号
    • 这只是旁观者的语法错误。在寻找一些答案时,似乎确实是 JScript 语法……
    • 不是IE下的语法错误。请参阅Scripting Events、here 和答案here。
    【解决方案4】:

    正如What does ‘::’ (double colon) do in javascript?的回答中提到的那样

    :: 是一个 ES2016 运算符,是 bind 的简写。此答案旨在帮助那些遇到 :: 的人,因为 ES2016 规范不适用于提出此问题的上下文。

    【讨论】:

    • 这个问题是2011年问的。
    • 是的,这个问题很可能经常出现在搜索引擎结果中,因为 ES2016 已经出现并使用了::。正如我上面提到的,这个答案不是指原始问题,而是打算通知那些寻找 ES2016 实现的人。
    • 答案与问题无关,因为问题中的语法是函数声明,不可能与 ES2016 绑定有任何关系。
    • 我很欣赏这个答案,因为我正在寻找 :: 对 ES2016 所做的事情。搜索“ :: 做了什么”很困难,因为 :: 对搜索不太友好,所以我再次在这个答案中找到了价值。
    【解决方案5】:

    我很确定那不是有效的 Javascript 语法。

    如果它适用于 IE 而不是其他浏览器,则可能是 IE 将其视为另一种脚本语言(可能是 VBScript?虽然我不记得有双冒号运算符?不知道它是什么其他语言可能是。)

    【讨论】:

    • IE 运行 JScript,而不是“标准”Javascript,因此它识别的东西比你想象的要多:)
    • 在IE和WSH下的Javascript中确实有特殊的含义。请参阅Scripting Events、here 和答案here。
    【解决方案6】:

    问题可能不是What does ‘::’ (double colon) do in javascript?的重复,但答案是:是语法错误。

    如下:

    function SpeechMikeControl::SPMEventButton(lDeviceID, EventId) {
    

    表达式开头的全局上下文中的关键字function 表示函数声明。后面的必须是作为函数名的标识符。名称后面必须是开组运算符'('、形参列表和闭组运算符')'。所以 function 和 () 之间只能是允许字符的单个标识符(不是保留字,也不是将来的保留字,但这不是问题在这里)。

    “:”(冒号)字符是标点符号,不能出现在标识符中。因此,如果代码被视为 javascript,它必须导致语法错误。

    也许 IE 有该语言的扩展,我不太了解 ECMAScript,不知道这是否允许,但我预计不会,因为它会破坏其他实现。

    【讨论】:

    • 不是IE下的语法错误。请参阅Scripting Events、here 和答案here。
    • @ZevSpitz——问题被标记为 javascript,而不是 JScript。如果您发布了支持它的 JScript 版本和 IE 的相关版本以及 Microsoft Edge 是否支持它的答案,将会更有帮助。
    • 问题被标记为 javascript,而不是 JScript 好吧,这很容易解决。 :) 但是,我说错了;它在 Microsoft JScript(AFAIK 所有版本)下有效,可用于多种环境——IE、WSH、经典 ASP。
    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2013-11-22
    • 2016-12-23
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多