作为一个年轻的开发者,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中的私有语法编写过代码? 经验如何?