La seule façon d'obtenir une parenthèse-moins appel de fonction en JavaScript est de définir une propriété setter/getter, ou de remplacer l'une des méthodes spéciales: toString
ou valueOf
. Dans aucun des deux cas, vous n'avez un très bon contrôle sur le paramètre qui est transmis à l'appel.
function C() {}
C.prototype.valueOf = function() { alert("valueOf called"); };
var c = new C();
// No parentheses
+c;
Vous pouvez appeler un constructeur sans parenthèses, mais à nouveau, ne pouvez pas passer d'arguments.
function f() { alert("f"); }
// No parentheses
new f
Une raison pour laquelle vous ne pouvez pas la fonction d'insertion des points-virgules.
f()
est un appel de fonction, comme
f
()
et
if
(x) { }
est une condition valide car if
est une partie essentielle de la langue, mais si vous pouvez simplement laisser tomber les parenthèses à partir d'un appel de fonction puis l'insertion de point-virgule devrait traiter le code comme
var x = raise
y
en tant que variable initialisée au résultat de l'appel d'une fonction.
Depuis que vous avez demandé sur les extensions de langue, chapitre 16 de la spécification EcmaScript dit que les interprètes sont autorisés à ajouter à la grammaire de la langue,
Une mise en œuvre peut étendre la syntaxe du programme et modèle d'expression régulière ou la syntaxe d'indicateur. Pour permettre cela, toutes les opérations (appelant eval, utilisant un littéral d'expression régulière ou utilisant le constructeur Function ou RegExp) autorisées à lancer SyntaxError sont autorisées à afficher un comportement défini par l'implémentation au lieu de lancer SyntaxError lorsqu'elles rencontrent une implémentation. extension définie à la syntaxe du programme ou modèle d'expression régulière ou syntaxe d'indicateur.
donc depuis
raise foo
n'est pas une expression valide ou une déclaration dans la langue, ils pourraient permettre, mais ils ne pouvaient pas le faire d'une manière qui change le sens de
raise
foo
qui doit avoir la même signification que
raise;
foo
que l'interprète devrait faire raise
une nouvelle restricted production qui est problématique en raison du verbiage:
Voici les seules productions limitées dans la grammaire:
qui est probablement censé être non -normatif, mais ce n'est pas explicitement le cas.
Si c'est une partie critique, vous pourriez peut-être nous dire ce que vous entendez par 'raise' (car ce n'est pas un mot-clé JavaScript). Voulez-vous dire «jeter»? Si non, que veux-tu dire? –
Si vous n'aimez pas la syntaxe _messy_ JavaScript, vous pouvez regarder les langues qui se compilent en JavaScript comme CoffeeScript. – Halcyon
C'était juste un exemple, le but serait de créer un nouveau mot-clé nommé "raise" qui passe un paramètre à A_raise. – CoryG