---
title:es6属性标识
date: 2018-06-09 16:29:00
updated: 2018-06-10 12:00:00
categories:
- 前沿脚本
- 编程开发
tags:
- nodejs
---
发现问题:
使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。
解决问题:
Symbol保证每个属性的名字都是独一无二,从根本上防止属性名的冲突
创建?
//创建
let s = Symbol();
//检查
typeof s
// "symbol"
const sym = Symbol('foo');
String(sym) // "Symbol(foo)"
sym.toString() // "Symbol(foo)"
使用?
作为属性名字
let mySymbol = Symbol();
// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
let a = {
[mySymbol]: 'Hello!'
};
// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
获取属性名字
const obj = {};
let a = Symbol('a');
let b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';
const objectSymbols = Object.getOwnPropertySymbols(obj);
objectSymbols
// [Symbol(a), Symbol(b)]
获取某个标识
有时,我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点。
let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');
s1 === s2 // true
网友评论