В Javascript, что означает это подчеркивание? - PullRequest
79 голосов
/ 28 ноября 2011
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) Зачем их использовать?

Ответы [ 7 ]

147 голосов
/ 28 ноября 2011

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

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

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

Их нельзя читать или записывать (прямо) извне класса.

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

21 голосов
/ 28 ноября 2011

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

Здесь это кратко обсуждается, хотя против них советуют: http://javascript.crockford.com/code.html

8 голосов
/ 28 ноября 2011

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

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

4 голосов
/ 28 ноября 2011

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

2 голосов
/ 28 ноября 2011

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

0 голосов
/ 13 декабря 2018

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

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

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

0 голосов
/ 10 января 2016

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

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

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

Помните, что существуют инструменты, которые могут удалять комментарии и операторы консоли для «Рабочих выпусков». При этом использование исходных карт также является пустой тратой времени и ресурсов. Не минимизируйте, пока не будете готовы к публикации .. т.е. Dev Build (без минификации, сохраните комментарии и операторы консоли), Release Build (удалите комментарии и операторы консоли и минимизируйте сборку Dev. Нет необходимости перекомпилировать Dev Build при его выпуске качественный код, просто подготовьте его к выпуску и разверните).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...