var Gallery = Backbone.Controller.extend({
_index: null,
_photos: null,
_album :null,
_subalbums:null,
_subphotos:null,
_data:null,
_photosview:null,
_currentsub:null,
routes: {
"": "index",
"subalbum/:id": "subindex",
"subalbum/:id/" : "directphoto",
"subalbum/:id/:num" : "hashphoto"
},
initialize: function(options) {
var ws = this;
if (this._index === null){
$.ajax({
url: 'data/album1.json',
dataType: 'json',
data: {},
success: function(data) {
ws._data = data;
ws._photos =
new PhotoCollection(data);
ws._index =
new IndexView({model: ws._photos});
Backbone.history.loadUrl();
}
});
return this;
}
return this;
},
//Handle rendering the initial view for the
//application
index: function() {
this._index.render();
},
Я читаю руководство по backbone.js здесь: http://addyosmani.com/blog/building-spas-jquerys-best-friends/
Какие подчеркивания? (_index, _photos, _album) Зачем их использовать?
javascript
oop
backbone.js
TIMEX
источник
источник
Ответы:
Это означает частные поля или частные методы. Методы, предназначенные только для внутреннего использования.
Их не следует вызывать вне класса.
Частные поля содержат данные для внутреннего использования.
Их нельзя читать или записывать (напрямую) вне класса.
Примечание. Очень важно отметить, что простое добавление символа подчеркивания к переменной не делает ее частной, это всего лишь соглашение об именах.
источник
Насколько мне известно, он обычно используется для обозначения частной переменной (но на самом деле не обеспечивает никакой конфиденциальности, а просто соглашение).
Здесь это кратко обсуждается, хотя их не рекомендуется: http://javascript.crockford.com/code.html
источник
myObj.getSmePromise().then( function(o) { do stuff } );
но набирать его в консоли Chrome затруднительно, поэтому я исходилmyObj._someValue
из того, что "правильный код" на самом деле не получит к нему доступа - это, однако, с роскошь моих коллег, также знающих это соглашение, если вы пишете следующий jQuery / lodash / angular / react или что-то еще, я бы не стал полагаться на то, что все ваши пользователи знают или уважают это!При использовании, как будто
_varname
это просто часть имени переменных и не имеет значения javascript. Разработчики используют его для обозначения значения или области действия переменной. В этом случае похоже, что он сообщает разработчику, что эта переменная должна быть локальной или частной.Несколько замечаний: в этом конкретном примере использование
_.varname
будет обозначать переменную или функцию с библиотекой underscore.js. Также можно использовать_varname
для обозначения переменной, содержащей объект подчеркивания, аналогично в нашем офисе мы используем$varname
для обозначения переменной, содержащей объект JQuery.источник
Вероятно, он используется для обозначения внутренних / частных свойств. Точно так же, как в python, префикс переменной с подчеркиванием - это простой способ сообщить разработчикам, что переменная является внутренней, и им лучше не вмешиваться в нее (и если они это сделают, даже незначительное обновление задействованной библиотеки может что-то сломать).
источник
Обычно
_
используется, чтобы сообщить пользователю / программисту, что это частная / защищенная переменная.источник
Как уже упоминалось, это практика многих разработчиков, к тому же плохая. Если вам приходится прибегать к подобным соглашениям в ваших методах программирования, вам следует изучить язык, методы и шаблоны, прежде чем пытаться использовать язык. Если кто-то не может отличить общедоступные / частные методы в вашем коде без использования «подчеркивания», то вам крайне не хватает навыков документирования. Многие общедоступные проекты в сети очень плохо документированы, что, вероятно, является причиной того, что соглашения о «подчеркивании» были «приняты» большинством малообразованных разработчиков, в то время как другие решили плыть по течению, а не придерживаться формальных шаблонов и методов проектирования. Есть причина, по которой «подчеркивание» не было написано в версиях ES6 / 7.
В блоге я недавно наткнулся на менеджера по программному обеспечению, который заявил: « Соглашение об именах с подчеркиванием позволяет с первого взгляда легко определить, предназначена ли функция переменной быть открытой или частной. ». Мой ответ: «Комментарии похожи на картинки, в данном случае они стоят тысячи подчеркиваний.
Существует бесплатный инструмент документации под названием Doxygen. Хотя он специально не поддерживает JavaScript, он может создавать профессиональную документацию для ваших приложений JavaScript, если вы используете префикс Doxygen в своих комментариях. Создавать приложения JavaScript с документацией действительно просто как для разработчиков, так и для пользователей, если приложить немного усилий в комментарии к коду.
Помните, что есть инструменты, которые могут удалять комментарии и консольные операторы для «Рабочих версий». При этом использование исходных карт также является пустой тратой времени и ресурсов. Не уменьшайте до тех пор, пока не будете готовы к публикации .. т.е. Dev Build (без минификации, оставляйте комментарии и консольные операторы), Release Build (удалите комментарии и консольные операторы и минимизируйте Dev-сборку. Нет необходимости перекомпилировать Dev Build после ее выпуска качественный код, просто подготовьте его к выпуску и разверните).
источник
Это небольшое дополнение. Как уже было сказано, это псевдоприватные переменные. Но тогда можно написать псевдопубличные функции, которые обращаются к этим частным переменным.
Меня смутил код коллег, в котором это фактически есть (но очень глубоко похоронено в отдельной библиотеке):
class x { constructor(id) {this._id = id} get id() {return this._id} } let y = new x(3)
Теперь у вас есть
y.id
иy._id
то, и другое , и они возвращают одно и то же значение. Но если вы это сделаете,console.log(y)
появится только_id
ключ.источник