语言基础

es6属性标识-js-v1.0.0

2019-08-10  本文已影响0人  一点金光
---
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
上一篇 下一篇

猜你喜欢

热点阅读