В чем смысл этого подчеркивания в Javascript?

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) Зачем их использовать?

Ответ 1

Это означает частные поля или частные методы. Методы, которые предназначены только для внутреннего использования.

Они не должны вызываться вне класса.

Частные поля содержат данные для внутреннего использования.

Они не должны читаться или записываться (напрямую) извне класса.

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

Ответ 2

Насколько мне известно, он обычно используется для указания частной переменной (но на самом деле не обеспечивает конфиденциальности, просто соглашение).

Вкратце обсуждается здесь, хотя им советуют: http://javascript.crockford.com/code.html

Ответ 3

Когда используется как _varname, это просто часть имени переменных и не имеет значения javascript. Разработчики используют его для обозначения значения или области действия переменной. В этом случае похоже, что он говорит разработчику, что эта переменная должна быть локальной или частной переменной.

Несколько замечаний в этом конкретном примере с использованием _.varname означало бы переменную или функцию с библиотекой underscore.js. Также можно использовать _varname для обозначения переменной, содержащей объект подчеркивания, аналогично в нашем офисе, мы используем $varname для обозначения переменной, содержащей объект JQuery.

Ответ 4

Вероятно, он используется для обозначения внутренних/частных свойств. Точно так же, как в префиксе python переменная с подчеркиванием - это простой способ сказать разработчикам, что переменная является внутренней, и лучше не вмешиваться в нее (и если они это сделают, даже незначительное обновление задействованной библиотеки может сломать вещи).

Ответ 5

Обычно _ используется для указания пользователю/программисту, что это приватная/защищенная переменная, о которой идет речь.

Ответ 6

Как уже упоминалось, это практика среди многих разработчиков, плохая в этом. Если вам прибегают к подобным соглашениям в ваших методах программирования, вы должны изучить язык, методы и шаблоны, прежде чем пытаться использовать язык. Если кто-то не может различать общедоступные/частные методы в вашем коде без использования "подчеркивания", тогда ваши навыки работы с документацией крайне отсутствуют. Многие публичные проекты в Интернете очень плохо документированы, что, вероятно, объясняется тем, что "подчёркивающие" соглашения были "приняты" большинством из образованных разработчиков, в то время как другие решили пойти с потоком, а не придерживаться формальных шаблонов и методов дизайна. Существует причина, почему "подчеркивание" не было записано в версии ES6/7.

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

Существует бесплатный инструмент для документации под названием Doxygen. Хотя он не поддерживает JavaScript, он может создавать профессиональную документацию для ваших приложений JavaScript, когда вы используете префикс Doxygen в своих комментариях. Очень просто создавать приложения JavaScript с документацией, как для разработчиков, так и для пользователей, когда вы прикладываете небольшое усилие к комментариям кодов.

Помните, что есть инструменты, которые могут удалять комментарии, и консольные инструкции для "Production Releases". При этом использование исходных карт является пустой тратой времени и ресурсов. Не уменьшайте до тех пор, пока не будете готовы опубликовать.. ie Dev Build (без миниатюризации, комментариев и консольных заявлений), Release Build (удалить комментарии и консольные инструкции и минимизировать сборку Dev. Нет необходимости перекомпилировать Dev Build при ее выпуске качественный код, просто подготовьте его для выпуска и разверните его).

Ответ 7

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

Я запутался в коде коллег, который действительно имеет это (но похоронен очень глубоко в отдельной библиотеке):

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.

enter image description here