第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。
(本节完)