在JavaScript中我们如何实现class类的属性的访问限制呢?
static
JavaScript中,static关键字是用来定义静态属性或静态方法的;
它使得可以通过类本身全局操作一些变量和方法
// 示例代码
class Prent {
static age = 99;
// 静态方法
static getAge() {
console.log(this.age);
}
}
Prent.getAge();
console.log(Prent.age)
public
如何设置一个公共属性,使得类的内部和外部还有继承的子类都可以进行访问呢?
很简单,平常在类中设置的就是公共属性
// 示例代码
class Prent {
constructor(name) {
// 公共属性
this.name = name || 'xiao';
}
// 公共方法
getName() {
// 内部访问
console.log(this.name)
}
}
const p = new Prent();
// 外部访问
p.getName();
console.log(p.name)
class Son extends Prent {
}
const s = new Son();
// 子类访问
s.getName();
console.log(s.name)
protected
建立一个类,对其内部属性进行保护,使得外部不可访问,只有当前类和其子类可以访问
通过getter,setter来访问和设置其内部属性
// 内部对属性进行保护,使外部不能进行访问
// 方式一
const HOST = Symbol("host")
// 方式二
const HOSTWEAKMAP = new WeakMap();
class Prent {
constructor() {
// 属性保护,只能当前类和子类能够访问
this[HOST] = 'www.baidu.com';
HOSTWEAKMAP.set(this, 'www.qq.com');
}
get host() {
return this[HOST]
}
get hostweak() {
return HOSTWEAKMAP.get(this);
}
}
const p = new Prent();
console.log(p.host)
console.log(p.hostweak)
class Son extends Prent {
}
const s = new Son();
console.log(s.host)
console.log(s.hostweak)
private
在一个类内部建立私有属性只能内部自己使用,外部和子类都不能进行访问
我们可以使用 # 来声明私有属性
class Prent {
// 私有属性
#name = "456xxx";
// 私有方法
#getName() {
console.log(this.#name)
}
// 公共方法
getName() {
this.#getName();
}
}
const p = new Prent();
p.getName();
// 访问将会报错 Property '#getName' is not accessible outside class 'Prent' because it has a private identifier.
// p.#getName();
class Son extends Prent {
}
const s = new Son();
// 子类只能通过父类暴露公共方法来访问其内部私有属性
s.getName();