Протовис - Какие это функции без вьющихся скобок? [дублировать

StackOverflow https://stackoverflow.com/questions/6831655

  •  27-10-2019
  •  | 
  •  

Вопрос

Возможный дубликат:
Синтаксис функции Lambda в JavaScript без вьющихся скобок

Работа с Protovis - они реализуют некоторые странные функции делегата, которые даются без вьющихся скобок - может ли кто -нибудь затмевать его для меня, пожалуйста? Пример:

vis.add(pv.Label)
.data(cols)
.left(function() this.index * w + w / 2)
.top(0)
.textAngle(-Math.PI / 2)
.textBaseline("middle");
Это было полезно?

Решение

В целом, как объяснено в Вопрос @missingno связан с, Это альтернативный синтаксис для объявления функций, в первую очередь поддерживаемый Firefox. Вместо:

function() { return "stuff" };

Вы опускаете кудрявые брекеты и return утверждение:

function() "stuff";

Конец функции происходит в любом месте, когда нормальное утверждение может закончиться - полуколон (;), запятая (,), или близкая скобка ()).

В Протовисе, Существует множество случаев, когда вам нужно объявить короткие анонимные функции с одним предприятием, которые будут выполняться в качестве аргументов для вызовов метода. Это такая распространенная схема, что эта библиотека включает в себя утилиту разбора, чтобы убедиться, что приведенный выше синтаксис поддерживается в браузерах, кроме Firefox. Если вы прилагаете свой код протовиса в теги скрипта, например:

<script type="text/javascript+protovis">
// ...
</script>

Сценарий будет оцениваться протовисом анализатора, который обеспечивает поддержку специального синтаксиса.

Мои два цента в этом: потенциал этого синтаксиса в том, что он действительно быстрый (плюс все примеры используют его). Обычно скрипт с использованием протовиса включает много Из анонимных функций, так что это может спасти вам немного печати, и это выглядит довольно круто. Когда я впервые начал использовать Protovis, я использовал его много - не только в вызовах методов, но и в объявлениях переменных.

Но, у него есть несколько действительно тяжелых проблем:

  • Потому что весь ваш код проходит через протовис-анализатор, который, по сути, разгоняет код, чтобы повторно добавить return заявления, а затем eval() Это становится фантастически трудно отлаживать простые синтаксические ошибки. Вы получаете все эти ошибки "неожиданного идентификатора", указывающие на eval() Строка в протовисском коде, не имея никакого признака того, где проблема (отсутствующий полуколон и т. Д.) Происходит в вашем собственном коде.

  • Если вы хотите, чтобы ваш код работал за пределами Firefox, вы должны включить весь свой код в специальный javascript+protovis Теги скрипта, что означает отсутствие внешних файлов. Как только вы начнете делать что -то еще в пределах предельной сложности, вы действительно хотите, чтобы ваши сценарии были отделены большую часть времени.

  • Как и в случае с любым «умным» синтаксисом, его может быть очень трудно читать, особенно когда вы используете его неожиданными способами (например, за пределами метода вызова). Да, это кратко, но есть определенная цена, которую нужно заплатить за разборчивость.

Все это сказано, я все еще использую его, когда хочу быстро сделать грубый набросок. Но большую часть времени я бы предложил придерживаться обычных тегов сценариев и стандартных, кудрявых объявлений функций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top