在JavaScript中,私有变量是指只能在对象内部访问的变量,外部无法直接访问。实现私有变量的方式有多种,以下是几种常见的方法:
通过闭包可以实现私有变量,外部无法直接访问。
function createPerson(name, age) {
let _name = name; // 私有变量
let _age = age; // 私有变量
return {
getName: function() {
return _name;
},
getAge: function() {
return _age;
},
setName: function(name) {
_name = name;
},
setAge: function(age) {
_age = age;
}
};
}
const person = createPerson('Alice', 30);
console.log(person.getName()); // 输出: Alice
console.log(person.getAge()); // 输出: 30
person.setName('Bob');
person.setAge(25);
console.log(person.getName()); // 输出: Bob
console.log(person.getAge()); // 输出: 25
通过Symbol可以创建私有属性,外部无法直接访问。
const _name = Symbol('name');
const _age = Symbol('age');
class Person {
constructor(name, age) {
this[_name] = name;
this[_age] = age;
}
getName() {
return this[_name];
}
getAge() {
return this[_age];
}
setName(name) {
this[_name] = name;
}
setAge(age) {
this[_age] = age;
}
}
const person = new Person('Alice', 30);
console.log(person.getName()); // 输出: Alice
console.log(person.getAge()); // 输出: 30
person.setName('Bob');
person.setAge(25);
console.log(person.getName()); // 输出: Bob
console.log(person.getAge()); // 输出: 25
ES2020引入了私有字段,使用#前缀定义私有变量。
class Person {
#name;
#age;
constructor(name, age) {
this.#name = name;
this.#age = age;
}
getName() {
return this.#name;
}
getAge() {
return this.#age;
}
setName(name) {
this.#name = name;
}
setAge(age) {
this.#age = age;
}
}
const person = new Person('Alice', 30);
console.log(person.getName()); // 输出: Alice
console.log(person.getAge()); // 输出: 30
person.setName('Bob');
person.setAge(25);
console.log(person.getName()); // 输出: Bob
console.log(person.getAge()); // 输出: 25
通过以上方法,可以有效地实现JavaScript中的私有变量,提高代码的封装性和安全性。
领取专属 10元无门槛券
手把手带您无忧上云