约定以 _ 开头的属性为私有属性
这种不是真正的私有属性,可以直接访问自定义的私有属性命名
class ClassA {
constructor(x) {
this._x = x
}
getX() {
return this._x
}
}
const a = new ClassA(1)
// 可以直接访问自定义的私有属性命名
console.log(a._x) // 1
console.log(a.getX()) // 1
内部变量版
class ClassB {
constructor(x) {
let _x = x
this.getX = function() {
return _x
}
}
}
const b1 = new ClassB(1)
console.log(b1._x) // undefined
console.log(b1.getX()) // 1
const b2 = new ClassB(2)
console.log(b1.getX(), b2.getX()) // 1 2
闭包版
普通闭包版(实例之间会共享变量)
const ClassA = (function() {
let _x
return class {
constructor(x) {
_x = x
}
getX() {
return _x
}
}
})()
const a1 = new ClassA(1)
console.log(a1._x) // undefined
console.log(a1.getX()) // 1
console.log(a1 instanceof ClassA) // true
const a2 = new ClassA(2)
console.log(a1.getX(), a2.getX()) // 2 2 --- 实例之间会共享变量!!!