Подчеркнуть bindAll, явное именование методов - PullRequest
5 голосов
/ 07 февраля 2012

Я использую _.bindAll во многих моих Backbone.Views.

_.bindAll(this, 'render', 'addOne', 'addAll', 'someFunctionA', 'someFunctionB');

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

Поскольку существует короткая версия bindAll, которая устранит эту потребность, мне интересно, какие недостатки (производительность, читаемость, гибкость, ...) существуют иСчитаете ли вы их приемлемыми для повышения производительности?

_.bindAll(this);

Ответы [ 2 ]

4 голосов
/ 21 марта 2013

Я некоторое время использовал _.bindAll(this) в магистральном проекте.После профилирования кода я понял, что вызовы _.bindAll занимают заметную часть всех вызовов функций.На основании результатов теста производительности http://jsperf.com/underscore-bindall-this-vs-bindall-this-params представляется, что явное именование методов более производительно (особенно для объектов с большим количеством функций)

4 голосов
/ 07 февраля 2012

Нет практического снижения производительности за использование этой формы bindAll. Однако будет неприятно, если по какой-то причине вам не нужен метод, связанный с this.

Однако вы можете обнаружить, что вам не нужно использовать bindAll так часто, как вы думаете. Все методы, связанные с обработчиками событий (с хэшем событий), автоматически связываются с this.

Кроме того, когда вы явно привязываете событие, вы можете передать привязку this в третьем параметре. Например:

this.model.bind('change', this.render, this)

...