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:

  • 相关阅读:
    协程方法的开启、关闭以及传参
    五种访问修饰符
    多态之虚方法、抽象类、接口
    递归算法
    继承之构造方法
    鼠标相关操作(Cursor类及相关API)
    遇到的问题(七)
    遇见的问题(六)
    遇见的问题(五)
    函数VS对象
  • 原文地址:https://www.cnblogs.com/huayang1995/p/15045919.html
Copyright © 2011-2022 走看看