js类中的私有属性
class Person {
constructor(name) {
this.name = name // 公有属性
}
}
class
关键字只是语法糖,有没有都可以实现
class Login {
constructor(username, password) {
this.username = username
this.password = password
}
}
const xguo = new Login('小郭', '88888888')
-
如何让
password
这个属性成为私有?即类外不可访问 -
闭包?
let obj = (function() {
// 闭合空间都是私有的
return () => {
}
})()
-
闭包,只有函数内部的子函数才能读取局部变量
-
如何设置一个
key
存进对象中,外部不可访问呢?symbol!
class Login {
constructor(username, password) {
this.username = username
const PASSWORD = Symbol()
this[PASSWORD] = password
}
checkPassword(pwd) {
return this[PASSWORD] == pwd
}
}
var userA = new Login('aa', '123456')
console.log(userA.checkPassword(123456));
-
symbol
设置唯一key
,规避了公共访问 -
那么如何访问对象中
symbol
作为key
的属性呢?
const gender = Symbol('gender')
const obj = {
name: 'guo',
age: 17,
[gender]: 'man'
}
console.log(obj[gender]); // man
console.log(Object.getOwnPropertySymbols(obj)); // [ Symbol(gender) ]
console.log(Reflect.ownKeys(obj)); // [ 'name', 'age', Symbol(gender) ]
- 可使用
Object.getOwnPropertySymbols()
和Reflect.ownKeys()
取到