返回
ES6 系列之私有变量的实现
前端
2023-11-04 20:52:36
约定
ES6 中没有提供直接的私有变量语法,但我们可以通过一些约定来实现私有变量。
-
使用下划线前缀:
这种方法是最简单直接的,也是最常见的。我们可以使用下划线前缀来表示私有变量,例如:
class Person { constructor(name) { this._name = name; } getName() { return this._name; } }
这种方法的优点是简单易懂,缺点是私有变量很容易被外部访问,因为只要知道变量名,就可以直接访问它。
-
使用 Symbol:
Symbol 是 ES6 中的新增特性,它可以创建唯一的标识符。我们可以使用 Symbol 来创建私有变量,例如:
const _name = Symbol(); class Person { constructor(name) { this[_name] = name; } getName() { return this[_name]; } }
这种方法的优点是私有变量不容易被外部访问,因为 Symbol 创建的标识符是唯一的,除非知道标识符的名称,否则无法访问私有变量。缺点是这种方法的实现比较复杂,而且 Symbol 是 ES6 中的新增特性,可能不支持旧的浏览器。
闭包
闭包是指内部函数可以访问外部函数的变量的函数。我们可以利用闭包来实现私有变量,例如:
function Person(name) {
var _name = name;
this.getName = function() {
return _name;
};
}
这种方法的优点是简单易懂,缺点是私有变量只能在内部函数中访问,如果我们需要在外部访问私有变量,就需要通过 getter 和 setter 方法。
constructor 的逻辑变得复杂。
构造函数应该只做对象初始化的事情,现在为了实现私有变量,必须包含部分方法的实现,代码组织上略不清晰。
Symb…
Symbol 是 ES6 中的新增特性,它可以创建唯一的标识符。我们可以使用 Symbol 来创建私有变量,例如:
const _name = Symbol();
class Person {
constructor(name) {
this[_name] = name;
}
getName() {
return this[_name];
}
}
这种方法的优点是私有变量不容易被外部访问,因为 Symbol 创建的标识符是唯一的,除非知道标识符的名称,否则无法访问私有变量。缺点是这种方法的实现比较复杂,而且 Symbol 是 ES6 中的新增特性,可能不支持旧的浏览器。