js中私有变量的创建的几种方法
0、原理
类的开发者和使用者不是一个人
1、闭包
// 内部可以访问,但是外部不能访问
(function(name){
// 闭合空间都是私有的
return function(){
}
})()
2、在constructor中用Symbol()代替key
用symbol做了一个新的key
// 类的开发者, 调用者
class Login{
constructor(username,password){
const PASSWORD = Symbol();
this.username = username
// 使用Symbol 规避了公共访问
this[PASSWORD] = password;
// 1. {} key
// 2. 怎么存进对象? key不可访问呢?私有
// 3. symbol
}
checkPassword(pwd){
return this[PASSWORD] == pwd
}
}
var userA = new Login('aa','123456');
// userA.password = '123456';
console.log(userA.username) //aa
console.log(userA.password) //undefined
3、用对象以Symbol定义
const gender = Symbol('gender');
const obj = {
name:'大胖猫',
age:'3',
[gender]:'公'
}
//obj.name
obj[gender] //调用成功
// 不可枚举
console.log(Object.keys(obj));
console.log(JSON.stringify(obj));
遍历object的方法:
均未成功调用出gender
console.log(Object.keys(obj));
console.log(JSON.stringify(obj));
仅调用出symbol的方法:
console.log(Object.getOwnPropertySymbols(obj));
调用出包括symbol的全部元素
console.log(Reflect.ownKeys(obj));
4、优化面向对象的读写操作
class Person{
constructor(name){
this.name = name; // 公有属性
}
get name(){
console.log('get 方法');
return this.name;
}
set name(str){
console.log('设置了name 方法');
this.name = str;
}
}
let coco = new Person('coco');
console.log(coco.name);
本文介绍了JavaScript中创建私有变量的四种方法:利用闭包、Symbol、对象属性及面向对象的getter/setter。通过示例代码详细展示了每种方法的实现过程,帮助读者理解如何在类和对象中实现数据的私有化,防止外部直接访问和修改私有成员。

被折叠的 条评论
为什么被折叠?



