es6 Symbol

性质:1 唯一的, 2 单独是一个类型, 

用作对象的私有属性

1   const sym = Symbol("private");
2 
3   export default function Constr(a){
4     return  {
5       [sym]: 111, //私有属性
6       pub:a
7     }
8   }
9   
<script type="module"></script>
  <script type="module">
    import Constr from "./constr.js";
    var c = new Constr("11111")
    for(var prop in c){
      console.log(prop); //找不到sym属性, 只能找到pub属性
    }
    console.log(Object.keys(c));//同样找不到prop属性
    console.log(Object.getOwnPropertySymbols(c)); //只有通过该方法才能拿到私有属性

2, js内部实现:

   2.1instanceof方法对应的内部实现接口 Symbol.hasInstance

接上例:

Object.defineProperty(Constr,Symbol.hasInstance,{
      value:function(){
        return false;
      }
    })
 console.log(c instanceof Constr); //结果是false, 因为已经用它改写了结果
原文地址:https://www.cnblogs.com/dangdanghepingping/p/14351566.html