今天重温了一下js中的对象属性的特性,发现每一个属性都有value(值),writable(可写性),enumerable(可枚举性),configurable(可配置性),然后就猜想是否可以在class里面运用这几个特性来设置class的私有属性,验证开始:
1.创建一个类testPrivate,然后用Object.defineProperty方法创建一个属性并设置他的特性writable(可写性),enumerable(可枚举性)为false,当然这里configurable属性必须为true否则就不能重新配他的值了。
class testPrivate{
constructor(){
Object.defineProperty(this,"x",{
value:1,
writable:false,
enumerable:false,
configurable:true
});
}
Xset(val){
Object.defineProperty(this,"x",{value:3});
}
}
然后去试试
let impTestPrivate = new testPrivate;
//impTestPrivate.x = 4; //结果:impTestPrivate.x = 1
impTestPrivate.Xset(3); //结果:impTestPrivate.x = 3
虽然结果还不错,但是在class内部想要改变这个属性的值,也得调用Xset方法,而且在class外依然可以改变这个属性的配置,总之实验接口勉强还行;