带下划线和不带下划线的 JavaScript 属性之间的区别

vai*_*war 1 javascript

我在https://javascript.info/class看到了下面的代码

它的构造函数正在获取name参数并将其分配给this.name. 然后在名为 getter 的 getter 中name返回this._name。为什么即使构造函数不用于设置值,此代码也能工作?this._name

class User {

  constructor(name) {
    // invokes the setter
    this.name = name;
  }

  get name() {
    return this._name;
  }

  set name(value) {
    if (value.length < 4) {
      alert("Name is too short.");
      return;
    }
    this._name = value;
  }

}

let user = new User("John");
alert(user.name); // John

user = new User(""); // Name is too short.
Run Code Online (Sandbox Code Playgroud)

jab*_*baa 6

下划线是一个普通字符,在 JavaScript 中没有特殊含义。您可以将其替换p为 private 或其他内容。

该属性this.name有一个 getter 和一个 setter。

this.name = name;在构造函数中调用setter。甚至还有评论// invokes the setter

二传手set name(value)设定this._name = value;