zoukankan      html  css  js  c++  java
  • ES6 Symbol

    Symbol

    ES6新增的数据类型 - 基本类型

    值是由 Symbol 函数调用产生的

    
    var s1 = Symbol();
    var s2 = Symbol();
    console.log( typeof s1 ); // symbol
    console.log(s1, s2); // Symbol() Symbol()
    var s3 = Symbol('miaov');
    var s4 = Symbol('miaov');
    console.log(s3, s4); // Symbol(miaov) Symbol(miaov)
    console.log( s3 == s4 ); // false
    
    

    由上面的代码可以看出symbol产生的是一个唯一值,即使传入的参数一致,产生的值也是不同的。

    用处

    • 属性私有化 - 数据保护

    例如:我希望一个Person的性别在出生以后就能够被确定,并一直保存到死

    1. 不使用symbol
    var Person = (function() {
        var _gender = '';
        function P(name, gender) {
            this.name = name;
            _gender = gender;
        }
        P.prototype.getGender = function() {
            return _gender;
        }
        return P;
    })();
    
    var p1 = new Person('莫涛', '男');
    console.log(p1); // P {name: "莫涛"}
    console.log(p1.getGender()); // 

    私有化属性的方法就是不将属性直接定义在this对象上,而是放到整个函数的局部变量中

    1. symbol
    var Person = (function() {
        let _gender = Symbol('gender');
        function P(name, gender) {
            this.name = name;
            this[_gender] = gender;
        }
        P.prototype.say = function() {
            console.log(this[_gender]);
        }
        return P;
    })();
    
    var p1 = new Person('莫涛', '男');
    console.log(p1); //P {name: "莫涛", Symbol(gender): "男"}
    console.log(p1[Symbol('gender')]) //undefined
    
    

    通过symbol产生的值唯一,只在内部有局部变量存储,达到只读(反正我不知道这个东西与上面的实现有什么区别,可能是我太笨了,哈哈哈)

  • 相关阅读:
    Linux源码Kconfig文件语法分析
    从0移植uboot (一) _配置分析
    ARM汇编与C混合编程
    ARM汇编程序结构
    ARMGNU伪指令
    Linux tcp黏包解决方案
    Linux 服务器模型小结
    Linux IPC udp/tcp/UNIX域 socket编程
    Linux IPC socket 广播,组播
    Linux I/O多路复用
  • 原文地址:https://www.cnblogs.com/maopixin/p/9967696.html
Copyright © 2011-2022 走看看