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

  • 相关阅读:
    Xcode ARC,非ARC混搭
    Xcode GData库解析XML
    NSThread
    自定义UITableViewCell中的button实现视图切换
    UITableView
    iOS事件响应链
    结构体和NSData相互转换
    UIView的transform属性
    javascript垃圾回收机制
    ios8 滚动事件解放了
  • 原文地址:https://www.cnblogs.com/maopixin/p/9967696.html
Copyright © 2011-2022 走看看