Symbol 与内置符号:隐藏属性与协议定制
利用 Symbol 创建私有属性和覆盖语言内部行为,如 Symbol.toPrimitive、Symbol.hasInstance。 · 难度:入门 · +10XP
Symbol 与内置符号:隐藏属性与协议定制
Symbol 是 JavaScript 的原始类型,常用于定义唯一的属性键,避免命名冲突。本教程深入讲解内置的 Well-known Symbols,例如 Symbol.toPrimitive 控制对象到原始值的转换,Symbol.hasInstance 定制 instanceof 行为,Symbol.match 影响 String.prototype.match。我们还会演示如何利用 Symbol 模拟私有属性(尽管并非真正私有),以及使用 Symbol.for 在全局注册表中共享符号。
class MyNumber {
constructor(value) {
this.value = value;
}
Symbol.toPrimitive {
if (hint === 'string') return 数值: ${this.value};
if (hint === 'number') return this.value * 2;
return this.value;
}
}
const obj = new MyNumber(10);
console.log(String(obj)); // "数值: 10"
console.log(+obj); // 20