主页 > 前端 > javascript >
来源:未知 时间:2017-04-10 13:59 作者:xxadmin 阅读:次
[导读] 本文实例讲述了ES6中的Symbol类型。分享给大家供大家参考,具体如下: Symbol是在ES6中新加入的类型。 正如我们所知,JavaScript中有以下几种类型: Undefined , Null , Boolean , Number , String ,...
本文实例讲述了ES6中的Symbol类型。分享给大家供大家参考,具体如下: Symbol是在ES6中新加入的类型。 正如我们所知,JavaScript中有以下几种类型: Undefined ,Null ,Boolean ,Number ,String, Object。 但是上述类型在处理某些情况的时候是远远不够的。下面我们来举一个例子: 假设我们要移动div,也需要在某些情况下判断该div是否处于移动状态,所以我们会想到给div这类的对象设置一个属性。 if (element.isMoving) { smoothAnimations(element); } element.isMoving = true; 但是这样会存在一些问题,比如: 我们可能和第三方的库冲突; 我们可能和未来的标准冲突等。 于是可以采用第二种方法,也就是采用加密函数,制定一个值: var isMoving = SecureRandom.generateName(); ... if (element[isMoving]) { smoothAnimations(element); } element[isMoving] = true; 这样确实解决了冲突问题,但却带来了调试问题,我们每次查看该对象属性时都会看见一大堆垃圾命名。 于是为了解决冲突问题,ES6提出了Symbol这样的新类型。 Symbol是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用。我们看demo: var sym1 = Symbol(); var sym2 = Symbol("foo"); var sym3 = Symbol("foo");
Symbol("foo") === Symbol("foo"); // false 所以可以利用这个特性来创建私有属性: (function() { // 创建symbol var key = Symbol("key"); function MyClass(privateData) { this[key] = privateData; } MyClass.prototype = { doStuff: function() { ... this[key] ... } }; })(); var c = new MyClass("hello") c["key"] === undefined//无法访问该属性,因为是私有的 也可以利用Symbol来解除上面所说的冲突问题: // create a unique symbol var isMoving = Symbol("isMoving"); ... if (element[isMoving]) { smoothAnimations(element); } element[isMoving] = true; 当然,也可以通过另外的调用方法来生成可以与外界共享的Symbol类型,就是Symbol.for方法。
Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中,键为 "foo" Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbol Symbol.for("bar") === Symbol.for("bar"); // true,证明了上面说的 Symbol("bar") === Symbol("bar"); // false,Symbol() 函数每次都会返回新的一个 symbol var sym = Symbol.for("mario"); sym.toString(); // "Symbol(mario)",mario 既是该 symbol 在 symbol 注册表中的键名,又是该 symbol 自身的描述字符串 所以为了防止冲突,我们最好给symbol带上前缀: Symbol.for("mdn.foo"); Symbol.for("mdn.bar"); 希望本文所述对大家ECMAScript程序设计有所帮助。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com