Qu'est ce que '::' (double colon) fait dans javascript pour les événements?

J'ai vu ce code et je me gratte la tête en essayant de décider comment cela fonctionne.

<SCRIPT LANGUAGE=javascript> function SpeechMikeControl::SPMEventButton(lDeviceID, EventId) { alert("lDeviceID=" + lDeviceID + ", EventId=" + EventId); } </SCRIPT> 

Double colon? Il s'agit de l'utilisation d'un philips speech mike à partir d'une page Web.

Une idée de ce que signifie ce double colon? Cela me semble une erreur de syntaxe, mais ça marche! (Au moins dans IE).

J'ai pu trouver une référence obscure dans un manuel scanné de Microsoft Office Infopath 2003 . Il semble que ce soit une syntaxe JScript :

Un double colon est utilisé comme séparateur entre l'ID du script et le nom de l'événement

Je suppose que cela ne fait pas partie (ou ne fait plus partie) de l'implémentation ECMAScript d'Internet Explorer, mais appartient (ou l'habitude d'appartenir) à la mise en œuvre de Microsoft Office.

Il s'agit d'une extension de la langue Javascript implémentée par Microsoft. Il s'agit de spécifier un gestionnaire d'événements pour un objet COM référencé sur la page. SpeechMikeControl est le nom à l'échelle mondiale de l'objet COM (et / ou ActiveX):

  • Soit avec un OBJECT ou un autre élément, qui possède une propriété id de SpeechMikeControl , ou
  • Une variable globale SpeechMikeControl déclaré quelque part précédemment dans le Javascript

SPMEventButton est le nom de l'événement COM qui sera généré par l'objet SpeechMikeControl dans les circonstances de quelles connaissances.

Le double colon est une instruction pour connecter le corps de la fonction en tant que gestionnaire à l'événement du contrôle.

Assez sûr que ce soit une erreur de syntaxe

Je suis certain que ce n'est pas une syntaxe Javascript valable.

Si cela fonctionne dans IE mais pas dans d'autres navigateurs, il se pourrait que IE soit le traiter comme un autre langage de script (peut-être VBScript? Bien que je ne me souvienne pas aussi d'avoir un opérateur de colon double, je ne sais pas quelle autre langue il pourrait être .)

La question peut ne pas être un double de Qu'est-ce que '::' (double colon) fait en javascript? , Mais la réponse est: il s'agit d'une erreur de syntaxe.

Dans ce qui suit:

 function SpeechMikeControl::SPMEventButton(lDeviceID, EventId) { 

La fonction de mot-clé dans le contexte global au début d'une expression indique une déclaration de fonction. Le suivant doit être un identifiant qui est le nom de la fonction. Après que le nom doit être un opérateur de groupage d'ouverture '(', liste de paramètres formelle et opérateur de groupage de fermeture ')'. Donc, entre la fonction et () ne peut être qu'un identifiant unique de caractères autorisés (ce n'est pas un mot réservé ou un mot réservé à l'avenir, mais ce n'est pas un problème ici).

Le caractère ":" (colon) est un ponctuateur et ne peut pas apparaître dans un identifiant. Il doit donc causer une erreur de syntaxe si le code est traité comme javascript.

Peut-être IE a-t-il une extension à la langue, je ne connais pas ECMAScript assez bien pour savoir si cela est permis, mais je m'attends à ce qu'il ne brise d'autres implémentations.

Comme mentionné dans cette réponse de What does '::' (double colon) faire en javascript?

:: est un opérateur ES2016 qui est un raccourci pour lier. Cette réponse vise à aider ceux qui ont rencontré :: puisque la spécification ES2016, cependant, ne s'applique pas au contexte dans lequel cette question a été posée.