_有价值的名字(下划线+有价值的名字)javascript

_valuable name(underscore + valuable name) javascript

我目前正在学习JavaScript,对_变量名有疑问。

首先,有价值的名字和带下划线的相同有价值的名字有什么关系?我在 getter 和 setter 中使用 this._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);

};

感谢您的帮助!

凪沙

退后一步,传统上:

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

你直接和title打交道,直接给它赋值,当你引用它的时候,js returns它的值。

getset方法的概念是你可以给变量添加一个代理层来编写你自己的代码来定义当你给title赋值时会发生什么(设置)或引用它(获取)。这最常用于为默认值或 validate/scrub/format 值添加逻辑。

所以在你的代码中,title_title 是两个不同的变量,它们没有 directly/intrinsically 联系在一起,除了你自己在 title 中设置的约定setget 方法。

setget 内,您可以随心所欲。在这种情况下,您使用 "internal" 变量 _title 来保存实际值。这可以任意命名,但按照惯例,许多人使用与 public 相同的变量名,但带有 _ 前缀。您甚至根本不需要一个;这仅取决于您的目标是什么。