最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ES6中Symbol類型用法實例詳解

 更新時間:2017年04月06日 11:35:49   作者:布瑞澤的童話  
這篇文章主要介紹了ES6中Symbol類型用法,結(jié)合實例形式分析了Symbol類型的功能、使用方法與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了ES6中的Symbol類型。分享給大家供大家參考,具體如下:

Symbol是在ES6中新加入的類型。

正如我們所知,JavaScript中有以下幾種類型:

Undefined ,Null ,Boolean ,Number ,String, Object。

但是上述類型在處理某些情況的時候是遠(yuǎn)遠(yuǎn)不夠的。下面我們來舉一個例子:

假設(shè)我們要移動div,也需要在某些情況下判斷該div是否處于移動狀態(tài),所以我們會想到給div這類的對象設(shè)置一個屬性。

if (element.isMoving) {
 smoothAnimations(element);
}
element.isMoving = true;

但是這樣會存在一些問題,比如:

我們可能和第三方的庫沖突

我們可能和未來的標(biāo)準(zhǔn)沖突等。

于是可以采用第二種方法,也就是采用加密函數(shù),制定一個值:

var isMoving = SecureRandom.generateName();
...
if (element[isMoving]) {
 smoothAnimations(element);
}
element[isMoving] = true;

這樣確實解決了沖突問題,但卻帶來了調(diào)試問題,我們每次查看該對象屬性時都會看見一大堆垃圾命名。

于是為了解決沖突問題,ES6提出了Symbol這樣的新類型。

Symbol是一種特殊的、不可變的數(shù)據(jù)類型,可以作為對象屬性的標(biāo)識符使用。我們看demo:

var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");

Symbol("foo") 不會強(qiáng)制字符串 "foo" 進(jìn)入一個Symbol,它每次都創(chuàng)建一個新的Symbol

Symbol("foo") === Symbol("foo"); // false

所以可以利用這個特性來創(chuàng)建私有屬性:

(function() {
 // 創(chuàng)建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;

當(dāng)然,也可以通過另外的調(diào)用方法來生成可以與外界共享的Symbol類型,就是Symbol.for方法。

Symbol.for(key) 方法會根據(jù)給定的鍵 key,來從 symbol 注冊表中找到對應(yīng)的 symbol,如果找到了,則返回它,否則,新建一個與該鍵關(guān)聯(lián)的 symbol,并放入 symbol 注冊表中。

Symbol.for("foo"); // 創(chuàng)建一個 symbol 并放入 symbol 注冊表中,鍵為 "foo"
Symbol.for("foo"); // 從 symbol 注冊表中讀取鍵為"foo"的 symbol
Symbol.for("bar") === Symbol.for("bar"); // true,證明了上面說的
Symbol("bar") === Symbol("bar"); // false,Symbol() 函數(shù)每次都會返回新的一個 symbol
var sym = Symbol.for("mario");
sym.toString();
// "Symbol(mario)",mario 既是該 symbol 在 symbol 注冊表中的鍵名,又是該 symbol 自身的描述字符串

所以為了防止沖突,我們最好給symbol帶上前綴:

Symbol.for("mdn.foo");
Symbol.for("mdn.bar");

希望本文所述對大家ECMAScript程序設(shè)計有所幫助。

相關(guān)文章

最新評論

南京市| 资溪县| 巢湖市| 甘洛县| 新丰县| 云霄县| 宜城市| 浑源县| 仪陇县| 大名县| 集安市| 恩施市| 陆良县| 丹东市| 庆元县| 天等县| 那坡县| 开江县| 泸水县| 交城县| 错那县| 红桥区| 丹凤县| 闽侯县| 宿州市| 疏勒县| 嘉禾县| 新兴县| 桐乡市| 棋牌| 商南县| 西峡县| 连城县| 玉龙| 东乌珠穆沁旗| 莲花县| 贵阳市| 科技| 凤山市| 马公市| 通州区|