张森ZS

write code everyday

导航

读书笔记:深入理解ES6 (六)

第6章 Symbol 和 Symbol属性

第1节 创建 Symbol

  1.1 Symbol 指的是ES6中的私有属性

  1.2 创建语法:

1 let firstName = Symbol();
2 let person = {};
3 
4 person[firstName] = "zxx";
5 console.log(person[firstName]); //"zxx"

 

第2节 Symbol的使用方法

  所有使用可计算属性名的地方,都可以使用Symbol。举例:

 1 let firstName = Symbol("first name");
 2 
 3 //使用一个可计算对象字面量属性
 4 let person = {
 5     [firstName]: "zxx"
 6 };
 7 
 8 //将属性设置为只读
 9 Object.defineProperty(person, firstName, {writable: false});
10 
11 console.log( person[firstName] ); // "zxx"

 

第3节 Symbol 共享体系

   3.1 为什么要创建Symbol共享体系?

    有时候我们可能希望在不同的代码中共享同一个Symbol,在ES6中提供了一个可以随时访问的全局Symbol注册表,它是一个类似于全局作用域的共享环境。如果要创建一个可以共享的Symbol,那么要使用Symbol.for()方法。它只接受要给参数,也就是即将创建的Symbol的字符串的标识符。举例:

1 let uid = Symbol.for("uid");
2 let object = {};
3 Object[uid] = "12345";
4 
5 console.log( Object[uid] ); //"12345"
6 console.log( uid ); //  "Symbol(uid)"

 

第4节 Symbol与类型强制转换

  在JavaScript中,没有与Symbol逻辑等价的值,因而Symbol使用起来不是很灵活,尤其是不能将Symbol强制转换为字符串和数字类型。

 

第5节 Symbol属性检索

  在ES6中,添加了 Object.getOwnPropertySymbols() 方法,该方法返回一个包含所有Symbol自有属性的数组。举例:

1 let uid = Symbol.for("uid");
2 let object = {
3     [uid]: "12345"
4 };
5 let symbols = Object.getOwnPropertySymbols(object);
6 
7 console.log( symbols.length ); // 1
8 console.log( symbols[0] ); // "Symbols(uid)"
9 console.log( object[symbols[0]] ); // "12345"

 

第6节 通过well-known Symbol暴露其内部操作

  6.1 ES6中,延伸了ES5中“将JS中的一些‘神奇’的部分暴露出来,并相近定义了这些开发者们在当时模拟不了的功能”,在新标准中,主要通过在原型链上定义与Symbol相关的属性来暴露更多的语言内部逻辑。

  6.2 具体的一些方法类似于API,用到的时候可以查书 p.113 - p.127。

 

(本节完)

posted on 2019-09-06 11:48  张森ZS  阅读(162)  评论(0编辑  收藏  举报