js基础考点1

400 阅读1分钟

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()取到