ES6 新属性 Symbol

Symbol: 

  ES6 新增的一个基本类型,一个symbol的值可以通过 Symbol函数来获得

var sym= Symbol()
/* 
    Symbol的参数其实没有什么意义,只是给我们一个标示。例如:
    {Symbol('name'): 'Jack'}  看作 {name: 'Jack'}
    便于理解 变量的意思
*/
var s= Symbol('name') 

  那么开发中有什么用处?  下面介绍一种

class Person {
    constructor(name, gender) {
        this.name = name
        this.gender= gender
    }
}
// 现实中一个人的性别,出生之后就不会再改变,而这个类就做不到这一点
var man= new Person('jack','男')

man.gender= '女' // 这个男的 变性了

  那么使用Symbol 后

class Person {
    constructor(name, gender) {
        this.name = name
        var key = Symbol('gender')
        this[key] = gender
        Person.prototype.say = function () {
            console.log(this[key])
        }
    }
}
var man= new Person('jack','男') // Person { name: 'jack', [Symbol(gender)]: '男' }

man[Symbol('gender')]='女'  // 报错
 
// 这样这个类里面既有性别属性 ,也不能被改变,私有变量得到了保护
man.say() //

如果还有什么应用场景 ,欢迎评论 讨论  

原文地址:https://www.cnblogs.com/little-oil/p/13652631.html