国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

ES6中Symbol類型用法實例詳解

2024-05-06 16:36:24
字體:
來源:轉載
供稿:網友

本文實例講述了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") 不會強制字符串 "foo" 進入一個Symbol,它每次都創建一個新的Symbol

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 symbolvar isMoving = Symbol("isMoving");...if (element[isMoving]) { smoothAnimations(element);}element[isMoving] = true;

當然,也可以通過另外的調用方法來生成可以與外界共享的Symbol類型,就是Symbol.for方法。

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

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

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

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

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


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永康市| 荔波县| 安平县| 象州县| 白银市| 文成县| 齐齐哈尔市| 游戏| 桦川县| 清苑县| 叙永县| 东光县| 安化县| 中西区| 壶关县| 南通市| 吴桥县| 碌曲县| 开远市| 理塘县| 义马市| 建平县| 崇文区| 克拉玛依市| 临猗县| 东平县| 峨眉山市| 武夷山市| 青龙| 灵宝市| 大悟县| 康保县| 永昌县| 贞丰县| 云龙县| 天全县| 六安市| 琼结县| 略阳县| 讷河市| 平顶山市|