ES6中象征类型用法实例详解

  

本文实例讲述了ES6中类的象征型。分享给大家供大家参考,具体如下:

  

符号是在ES6中新加入的类型。

  

正如我们所知,JavaScript中有以下几种类型:

  

,,,,, .

  

但是上述类型在处理某些情况的时候是远远不够的。下面我们来举一个例子:

  

假设我们要移动div,也需要在某些情况下判断该div是否处于移动状态,所以我们会想到给div这类的对象设置一个属性。

        如果(element.isMoving) {   smoothAnimations(元素);   }   元素。isMoving=true;      之前      

但是这样会存在一些问题,比如:

  

我们;   

我们。   

于是可以采用第二种方法,也就是采用加密函数,制定一个值:

        var isMoving=SecureRandom.generateName ();   …   如果(元素(isMoving)) {   smoothAnimations(元素);   }   元素[isMoving]=true;      之前      

这样确实解决了冲突问题,但却带来了调试问题,我们每次查看该对象属性时都会看见一大堆垃圾命名。

  

于是为了解决冲突问题,ES6提出了象征这样的新类型。

  

。我们看演示:

        var sym1=符号();   var sym2=符号(" foo ");   var sym3=符号(" foo ");      之前      

<代码>符号(" foo ") 不会强制字符串“foo”进入一个符号,它<强> :

        符号(" foo ")===符号(" foo ");//错误      之前      

所以可以利用这个特性来创建私有属性:

        (函数(){//创建的象征   var关键=符号(“关键”);   函数MyClass (privateData) {   (例子)=privateData;   }   MyClass。原型={   doStuff:函数(){   …这(例子)…   }   };   })();   var c=new MyClass (“hello”)   c(“关键”)===定义//无法访问该属性,因为是私有的      之前      

也可以利用符号来解除上面所说的冲突问题:

     //创建一个独特的符号   var isMoving=符号(“isMoving”);   …   如果(元素(isMoving)) {   smoothAnimations(元素);   }   元素[isMoving]=true;      之前      

当然,也可以通过另外的调用方法来生成。

  

<代码> Symbol.for(关键)方法会根据给定的键键,来从符号注册表中找到对应的象征,如果找到了,则返回它,否则,新建一个与该键关联的象征,并放入符号注册表中。

        Symbol.for (" foo ");//创建一个符号并放入符号注册表中,键为“foo”   Symbol.for (" foo ");//从符号注册表中读取键为“foo”的象征   Symbol.for(“酒吧”)===Symbol.for(“酒吧”);//真的,证明了上面说的   符号(“酒吧”)===符号(“酒吧”);//错误,符号()函数每次都会返回新的一个象征   var sym=Symbol.for(“马里奥”);   sym.toString ();//狈?马里奥)”马里奥既是该符号在符号注册表中的键名,又是该符号自身的描述字符串      之前      

所以为了防止冲突,我们最好给带象征上前缀:

        Symbol.for (“mdn.foo”);   Symbol.for (“mdn.bar”);      之前      

希望本文所述对大家ECMAScript程序设计有所帮助。

ES6中象征类型用法实例详解