国产探花免费观看_亚洲丰满少妇自慰呻吟_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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 满洲里市| 新竹县| 宁晋县| 图木舒克市| 德阳市| 华坪县| 河源市| 浦江县| 东莞市| 杭州市| 余庆县| 仙居县| 寻乌县| 石狮市| 连江县| 陆丰市| 巨鹿县| 金塔县| 南华县| 安陆市| 汉源县| 彝良县| 伊川县| 安多县| 大同市| 渑池县| 揭阳市| 忻城县| 井陉县| 隆回县| 随州市| 溧阳市| 渭源县| 南阳市| 天祝| 芜湖市| 恩施市| 东安县| 定陶县| 河池市| 大邑县|