zoukankan      html  css  js  c++  java
  • 原生js之Symbol——读Javascript高级程序设计①

    Symbol()函数不能用做构造函数,与new关键字一起使用。这样做是为了避免创建符号包装对象,像使用Boolean、String、Number那样,他们都支持构造函数且可用于初始化包含原始值的包装对象:

    使用全局符号注册表

    如果运行时的不同部分需要共享和重用符号实例,那么可以用一个字符串作为键,在全局符号注册表中创建并重用符号。为此,需要使用Symbol.for()方法:

    let hehe = Symbol.for('foo');  //创建新符号

    let demo = Symbol.for('foo');  //重用已有符号

    console.log(hehe===demo);  //true

    注意:即使采用相同的符号描述,在全局注册表中定义的符号跟使用Symbol()定义的符号也并不等同:

    let localSymbol = Symbol('foo');

    let globalSymbol = Symbol.for('foo')

    console.log(localSymbol === globalSymbol)  //false

    全局注册表中的符号必须使用字符串键来创建,因此作为参数传给Symbol.for()的任何值都会被转为字符串。

    还可以使用Symbol.keyFor()来查询全局注册表,这个方法接收符号,返回该全局符号对应的字符串键。如果查询的不是全局符号,则返回undefined.

    // 创建全局符号

    let s  = Symbol.for('foo');

    console.log(Symbol.keyFor(s));    // foo

    //创建普通符号

    let s2 = Symbol('bar');

    console.log(Symbol.keyFor(s2))   // undefined

    注意:如果传给Symbol.keyFor()的不是符号,则该方法抛出TypeError:

  • 相关阅读:
    谨以此文纪念一周的心血历程
    面向对象初调用:foolish 电梯
    洛谷 1016 旅行家的预算
    洛谷 1514 引水入城
    洛谷 3178 树上操作
    洛谷 3811 【模板】乘法逆元
    洛谷 1156 垃圾陷阱
    洛谷 1363 幻想迷宫
    洛谷 1736 创意吃鱼法
    洛谷 1436 棋盘分割
  • 原文地址:https://www.cnblogs.com/huayang1995/p/15045919.html
Copyright © 2011-2022 走看看