JavaScript中的私有语法

80 阅读2分钟

作为一个年轻的开发者,JavaScript吸引我的一个方面是它的语法很宽松,我可以快速编码。当你作为一个工程师积累经验时,你开始意识到一些传统的编码结构是一件好事,即使它使你的速度变慢。例如,使用Jest或TypeScript为你的JavaScript添加类型,可以使你免于维护方面的头痛和意外的错误。虽然这些都是完成结构的预编译工具,但我们传统上是采用虚无的JavaScript模式来模拟JavaScript中的私有变量和方法

然而,你知道吗,浏览器和JavaScript语言支持一种特定的语法来创建类中的私有变量和函数? 让我们来看一看吧

类上的属性和方法一直被认为是公共的;要使一个属性或方法成为私有的,在其名称的开头添加一个#

class Developer {
  name;
  #age; // Don't tell anyone my age!

  constructor(name, age) {
    this.name = name;
    this.#age = age;
  }
};

const David = new Developer('David', 38);

console.log(David.name); // David
console.log(David.age);  // undefined
console.log(David.#age); // Error!  Uncaught SyntaxError: Private field '#age' must be declared in an enclosing class

David.name 是可用的,因为 是公共的,而 是私有的,因为它是用 声明的。同样,我们可以用 声明一个私有方法。name age # #

class Developer {
  name;
  #age; // Don't tell anyone my age!

  constructor(name, age) {
    this.name = name;
    this.#age = age;
  }

  #getAgeInDogYears() {
    return this.#age * 7;
  }
};

getAgeInDogYears 由于是用 来声明的,所以只允许在类本身中调用。 我们可以从类中公开任何信息,不管是公共的还是私有的,只要我们通过公共方法使其可用。#

class Developer {
  name = '';
  #age = 0;
  #ageInDogYears = 0;

  constructor(name, age) {
    this.name = name;
    this.#age = age;

    this.#ageInDogYears = this.#getAgeInDogYears();
  }

  #getAgeInDogYears() {
    return this.#age * 7;
  }

  log() {
    console.log(this.name);
    console.log(this.#age);
    console.log(this.#ageInDogYears);
  }
};

const David = new Developer('David', 38);
David.log();

// David
// 38
// 266

为声明私有类的属性和方法添加一个本地语法是JavaScript的一个受欢迎的补充;更棒的是,你只需在其名称的开头添加一个# ,就可以做到这一点。

你是否使用JavaScript中的私有语法编写过代码? 经验如何?