zoukankan      html  css  js  c++  java
  • ES6 Symbol

    let s = Symbol()
    console.log(typeof s)
    
    // 带参数,表示对Symbol实例的描述
    let s1 = Symbol('foo')
    let s2 = Symbol('bar')
    console.log(s1 , s1.toString())
    console.log(s2, s2.toString())
    
    //当参数是一个对象时,会调用该对象的toString方法,
    const obj = {
        toString(){
            return 'abc';
        }
    };
    const sym = Symbol(obj);
    console.log(sym)    // Symbol(abc)
    console.log(sym.description)  // abc
    
    // symbol作为属性名来使用
    let mySymbol = Symbol();
    
    // 第一种写法
    let a = {};
    a[mySymbol] = "hello! a";
    
    // 第二种写法
    let b = {
        [mySymbol]: 'hello,B!'
    }
    
    //第三种
    let c = {};
    Object.defineProperty(c, mySymbol, {value: 'hello!! C'});
    
    console.log(a[mySymbol])    // hello! a
    console.log(b[mySymbol])    // hello,B!
    console.log(c[mySymbol])    // hello!! C
    
    // symbol作为属性名时,不能使用点运算符
    const d = {};
    d.mySymbol = "Hello! d"; // 当使用点运算符时,点后面总是字符串,mySymbol作为一个字符串来使用,而不是一个Symbol值.
    console.log(d[mySymbol])  // 输出undefined
    console.log(d['mySymbol'])  // 输出 字符串Hello! d
    
    //在对象内部使用时,定义属性时,必须放在方括号之中
    let o ={
        [s] :function (arg) {
            return s.toString() +'必须放在方括号中,参数为:' + arg  // Symbol()必须放在方括号中,参数为:123
        }
    };
    console.log(o[s](123))
    //上面例子更简洁的写法
    const OBJ= {
        [s](arg){
            return s.toString() +'必须放在方括号中,参数为:' + arg
        }
    }
    console.log(OBJ[s](123)) //输出结果和上面的一样




  • 相关阅读:
    OpenCV中的绘图函数
    整理不错的opencv博客
    opencv中的函数
    这是一个学习前端技术的网站
    HDU1520 Anniversary party(树形DP入门)
    CF1255C League of Leesins(图论)
    HDU4725 The Shortest Path in Nya Graph(最短路分层)
    1288C Two Arrays
    CF1294D MEX maxiszing
    CF1295C Obtain the String
  • 原文地址:https://www.cnblogs.com/baiyifengyun/p/15092005.html
Copyright © 2011-2022 走看看