ES6--symbol

来源:互联网 发布:淘宝盗刷国外信用卡 编辑:程序博客网 时间:2024/05/29 19:35

1.symbol实例分析

'use strict'let getName =Symbol('name');//Symbole定义的不是一个字符串module.exports=class User{    [getName](){        return 'ggb'    }    print(){        console.log(this[getName]())    }}

下面写一个代码引用上面代码

const User =require('./005.symbole.js')let getName =Symbol('name');var user =new User();user.print();//ggbuser[getName]();//error    1111
可以看到 1111处代码报错了,此处可以作为私有成员访问的一个很好的例子。

2.使用一般的遍历不能得到symbol类型的值

'use strict'let name =Symbol('name');var obj={    age:22,    [name]:"ggb"}var keys=Object.keys(obj);console.log(keys)//['age']let keyfor(key in obj){    console.log(key)  //age}let key2=Object.getOwnPropertySymbols(obj)[0]console.log(obj[key2]);// 'ggb'

3.symbol取值

'use strict'var name1=Symbol.for('name')var name2=Symbol.for('name')console.log(name1===name2);//trueconsole.log(Symbol.keyFor(name1));//'name'
4. of用法

let arr=[1,2,3];for( let item of arr){    console.log(item) //分行打印出1,2,3}

5.symbole与iterator结合

let arr=[1,2,3];var iterater =arr[Symbol.iterator]();  console.log(Symbol.iterator)//Symbol(Symbol.iterator)console.log(typeof arr[Symbol.iterator])//functionconsole.log( arr[Symbol.iterator])//[Function: values]console.log(iterater.next());//{ value: 1, done: false }console.log(iterater.next());//{ value: 2, done: false }console.log(iterater.next());//{ value: 3, done: false }console.log(iterater.next());//{ value: undefined, done: true }let getName =Symbol('name');console.log(typeof getName) //symbolconsole.log(getName)//Symbol(name)



6.symbole与for of 结合

/** * Created by Administrator on 2017/6/11. */'use strict'class UserGroup{    constructor(users){        this.users=users;    }    [Symbol.iterator](){        let i=0;        const names=Object.keys(this.users)        let length=names.length;        let self=this;        return {            next:function(){                let name=names[i++];                let qq=self.users[name];                return {value:{name,qq},done:i>length}            }        }    }}let group =new UserGroup({name:'ggb',age:'28'})for(let u of group){    console.log(u);}let iterator =group[Symbol.iterator]();console.log(iterator.next());console.log(iterator.next());console.log(iterator.next());

打印结果为:

{ name: 'name', qq: 'ggb' }{ name: 'age', qq: '28' }{ value: { name: 'name', qq: 'ggb' }, done: false }{ value: { name: 'age', qq: '28' }, done: false }{ value: { name: undefined, qq: undefined }, done: true }

7.改良版

let obj={name:'ggb',age:'28'};let iteratorFunc=function(){        let i=0;        const names=Object.keys(this)        let length=names.length;        let self=this;        return {            next:function(){                let name=names[i++];                let qq=self[name];                return {value:{name,qq},done:i>length}            }        }}obj[Symbol.iterator]=iteratorFunc;for(let item of obj){    console.log(item);}

打印结果

{ name: 'name', qq: 'ggb' }{ name: 'age', qq: '28' }

8.iterator

var obj={    length:2,    '0':"aaa",    '1':"bbb",}obj[Symbol.iterator]=[][Symbol.iterator];for(let i of obj){    console.log(i);}'ggb'[Symbol.iterator];for(let i of 'ggb'){    console.log(i);}




原创粉丝点击