2013-08-22 4 views
1

В соответствии с Google style guide методы должны быть определены на прототипе конструктора, а свойства должны быть определены в конструкторе с использованием этого ключевого слова.Определение свойства - определение метода при использовании нокаута

Я делаю большую часть своей разработки переднего конца с использованием нокаута, который обрабатывает наблюдаемые свойства, превращая их в функции. То есть, все мои свойства теперь являются методами, более или менее. Это значительный успех? Существуют ли способы обхода нокаута с использованием JavaScript getters and setters?

ответ

1

Итак, да, есть плагин для нокаута, который использует геттеры и сеттеры, но он работает только в новых браузерах. Вы жертвуете совместимостью с IE8 < (это неизбежно, поскольку эти браузеры не поддерживают javascript getters/seters). The plugin can be found here.

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

Руководство по стилю Google просто не рассматривает этот сценарий. Это не удар производительности, чтобы разместить их в экземпляре, потому что вы сравниваете его со сценарием, который не будет работать. Размещение наблюдаемого на прототипе нарушит модель. Это не удар производительности, который делает единственное, что работает.

Как последнее замечание, плагин getters and setters не позволяет функциям исчезать, он просто скрывает их за геттером и сеттером. Производительность не улучшится, так как еще предстоит проделать ту же работу.

+0

Я не знаю нокаута, но что именно делает функции зависимыми от экземпляра? Если данные хранятся на объекте, тогда нет необходимости создавать функции отдельно для каждого объекта. – Esailija

+0

Функции должны закрывать данные экземпляра, и им приходится перехватывать чтение и запись, чтобы абоненты могли получать уведомления об изменениях. В функциях есть список подписчиков, к которым они должны публиковаться, который является экземпляром-депиантантом (у вас нет доступа к нему), а также уведомлять читателей, как вычисленных, о том, что наблюдаемый читается, поэтому читатели знают, чтобы установить подписку. – Tyrsius

+0

На самом деле это всего лишь нокаутированная идиосинкразия, а не реальное ограничение. Нет абсолютно никакой причины, чтобы он не мог использовать что-то вроде этого: http://jsfiddle.net/Y6Dds/ (да, некоторые люди могли считать строки неудобными, но Эмбер уходит с этим просто отлично) – Esailija

Смежные вопросы