Единственный способ получить меньше СКОБКАХ-вызов функции JavaScript заключается в определении свойства setter/getter или переопределении одного из специальных методов: toString
или valueOf
. В любом случае у вас нет действительно хорошего контроля над параметром, который передается на вызов.
function C() {}
C.prototype.valueOf = function() { alert("valueOf called"); };
var c = new C();
// No parentheses
+c;
Вы можете вызвать конструктор без круглых скобок, но опять же, не может передавать аргументы.
function f() { alert("f"); }
// No parentheses
new f
Одна из причин, вы не можете это точка с запятой вставки.
f()
является вызовом функции, как
f
()
и
if
(x) { }
является действительным условным, поскольку if
является основной частью языка, но если вы можете просто опустить скобки от вызова функции, тогда вставка с запятой должна обрабатывать код, такой как
var x = raise
y
как переменная, инициализированная результатом вызова функции.
Поскольку вы просили о расширениях языка, глава 16 спецификации ECMAScript говорится, что переводчики могут добавить к грамматике,
Реализация может расширить синтаксис программы и регулярное выражение или синтаксис флага. Чтобы это разрешить, все операции (такие как вызов eval, использование литерала регулярных выражений или использование конструктора Function или RegExp), которым разрешено бросать SyntaxError, разрешено демонстрировать поведение, определенное реализацией, вместо того, чтобы бросать SyntaxError, когда они сталкиваются с реализацией, определенное расширение для синтаксиса программы или шаблона регулярного выражения или синтаксиса флага.
так с тех пор
raise foo
не является допустимым выражением или заявление на языке, они могли позволить, но они не могли сделать это таким образом, что изменяет значение
raise
foo
, который должен иметь такое же значение, как
raise;
foo
поэтому переводчик должен сделать raise
новый restricted production, который является проблематичным из-за многословия:
Ниже приведены лишь ограниченные правила в грамматике:
Это, вероятно, имел в виду, чтобы быть не -нормативно, но это явно не так.
Если это критическая часть, возможно, вы могли бы рассказать нам, что вы подразумеваете под 'raise' (поскольку это не ключевое слово JavaScript). Вы имели в виду 'throw'? Если нет, то что вы имеете в виду? –
Если вам не нравится синтаксис _messy_ JavaScript, вы можете посмотреть на языки, которые компилируются на JavaScript, например CoffeeScript. – Halcyon
Это был всего лишь пример, целью было бы создать новое ключевое слово с именем «raise», которое передает параметр A_raise. – CoryG