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

首頁 > 語言 > JavaScript > 正文

詳解ES6系列之私有變量的實現

2024-05-06 15:27:52
字體:
來源:轉載
供稿:網友

前言

在閱讀 《ECMAScript 6 入門》的時候,零散的看到有私有變量的實現,所以在此總結一篇。

1. 約定

實現

class Example {  constructor() {    this._private = 'private';  }  getName() {    return this._private  }}var ex = new Example();console.log(ex.getName()); // privateconsole.log(ex._private); // private

優點

寫法簡單 調試方便 兼容性好

缺點

外部可以訪問和修改 語言沒有配合的機制,如 for in 語句會將所有屬性枚舉出來 命名沖突

2. 閉包

實現一

/** * 實現一 */class Example { constructor() {  var _private = '';  _private = 'private';  this.getName = function() {return _private} }}var ex = new Example();console.log(ex.getName()); // privateconsole.log(ex._private); // undefined

優點

無命名沖突 外部無法訪問和修改

缺點

constructor 的邏輯變得復雜。構造函數應該只做對象初始化的事情,現在為了實現私有變量,必須包含部分方法的實現,代碼組織上略不清晰。 方法存在于實例,而非原型上,子類也無法使用 super 調用 構建增加一點點開銷

實現二

/** * 實現二 */const Example = (function() { var _private = ''; class Example {  constructor() {   _private = 'private';  }  getName() {   return _private;  } } return Example;})();var ex = new Example();console.log(ex.getName()); // privateconsole.log(ex._private); // undefined

優點

無命名沖突 外部無法訪問和修改

缺點

寫法有一點復雜 構建增加一點點開銷

3. Symbol

實現

const Example = (function() {  var _private = Symbol('private');  class Example {    constructor() {     this[_private] = 'private';    }    getName() {     return this[_private];    }  }  return Example;})();var ex = new Example();console.log(ex.getName()); // privateconsole.log(ex.name); // undefined

優點

無命名沖突 外部無法訪問和修改 無性能損失

缺點

    寫法稍微復雜 兼容性也還好

4. WeakMap

實現

/** * 實現一 */const _private = new WeakMap();class Example { constructor() {  _private.set(this, 'private'); } getName() {   return _private.get(this); }}var ex = new Example();console.log(ex.getName()); // privateconsole.log(ex.name); // undefined

如果這樣寫,你可能覺得封裝性不夠,你也可以這樣寫:

/** * 實現二 */const Example = (function() { var _private = new WeakMap(); // 私有成員存儲容器 class Example {  constructor() {   _private.set(this, 'private');  }  getName() {    return _private.get(this);  } } return Example;})();var ex = new Example();console.log(ex.getName()); // privateconsole.log(ex.name); // undefined            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 岐山县| 灵丘县| 泰和县| 金乡县| 两当县| 定西市| 墨竹工卡县| 新建县| 兴城市| 高州市| 志丹县| 霸州市| 亳州市| 江山市| 金门县| 三明市| 唐山市| 永善县| 随州市| 额济纳旗| 准格尔旗| 班戈县| 安徽省| 奉化市| 镇安县| 大安市| 阳新县| 若尔盖县| 灵寿县| 福清市| 宣城市| 灵石县| 平陆县| 朝阳区| 迁安市| 黄浦区| 恩平市| 乌苏市| 新泰市| 涟水县| 德化县|