_значное имя (подчеркивание + ценное имя) javascript - PullRequest
0 голосов
/ 11 апреля 2020

В настоящее время я изучаю JavaScript, и у меня есть вопрос о _variable name.

Во-первых, какова связь между ценным именем и тем же ценным именем с подчеркиванием? Я использую this._title в getter и setter для получения значения из title, но я не понимаю, почему _title можно использовать без объявления, а также, когда утешает this._title, он может показывать значение title.

const movies = [];

const addMovieHandler = () => {
    const title = document.getElementById('title').value;

    const newMovie = {
        info: {
            set title(val) {
                if(val.trim() === ''){
                    this._title = 'DEFAULT';
                    return;
                }
                this._title = val;
                console.log(this)// shows the object of new movie
                console.log(val)// show value of title
                console.log(this._title)// also show value of title
            },
            get title() {
                return this._title.toUpperCase();
            }

        }
    };

    newMovie.info.title = title;//setter
    console.log(newMovie.info.title);//getter


    movies.push(newMovie);

};

Спасибо за помощь!

Нагиса

1 Ответ

0 голосов
/ 11 апреля 2020

Немного отступив, традиционно:

title = 'foo'; // assigns value 'foo' to title (set action)
console.log(title); // references title (get action)

Вы работаете непосредственно с title, присваивая ему значение напрямую, и когда вы ссылаетесь на него, js возвращает его значение.

Концепция методов get и set заключается в том, что вы можете добавить прокси-слой к переменной, чтобы написать собственный код, чтобы определить, что происходит, когда вы назначаете что-то для title (set) или reference это (получить). Это чаще всего используется для добавления logi c для значений по умолчанию или проверки значений / очистки / форматирования.

Таким образом, в вашем коде title и _title - это две различные переменные, которые не связаны напрямую / внутренне, за исключением ваших собственных соглашений, установленных в title * set и get методы.

А внутри set и get вы делаете все, что хотите. В этом случае вы используете «внутреннюю» переменную _title для хранения фактического значения. Это можно назвать как угодно, но по соглашению многие люди используют то же имя переменной, что и publi c, но с префиксом _. Вам даже не нужно иметь его вообще; это зависит только от вашей цели.

...