ECMAScript 6 里面的私有变量

ES6类的私有变量

“让我们创建一个ES6类!”  你说。 “让我们给它一个私有变量  x。”

class Foo {constructor(x) {this.x = x;}getX() {return this.x;}
}

“请。”  我回应,翻白眼。 “这个  x 变量并不是真正的私有。全世界都可以在那里读书和写作!”

你反驳说:  “我们只是在它前面加上一个下划线。” “人们永远不会使用它,因为它很丑,而且下划线会吓跑他们!”

class Foo {constructor(x) {this._x = x;}getX() {return this._x;}
}

“这很丑,”  我承认,皱着眉头,低下头,一边冒着优越感,一边在玻璃杯中打旋咖啡,  “但它仍然不是私人的,他们会用。 ”

你反驳说:“那么,我们就可以将它放到雷达下。” “我们将使其无法枚举。没有人会怀疑它在那里!”

class Foo {constructor(x) {Object.defineProperty(this, 'x', {value: x,enumerable: false,});}getX() {return this.x;}
}

[放下玻璃杯]  “就是这样,直到他们阅读源代码为止,”  我面无表情地回答。

“那么,我们将其保持为真正的私密性。”  您紧张地苦笑着,看着屋子里的其他人寻求支持,所有人都拒绝与他们目光交流。 “我们将所有内容隐藏在构造函数的闭包中。问题解决了!”

class Foo {constructor(x) {this.getX = () => x;}
}

“但是现在,”  我争辩着抬起额头,  “该类的每个实例都有该功能的副本。它不仅效率低下,而且超出了预期。人们期望它存在于原型中,而当它不存在时,他们会感到困惑并责备您!”

“好吧,”  你抓着稻草说,  “我们会把它存储在全班同学的地图外,以实例为键,也许没人能到达它?”

const __ = new Map();class Foo {constructor(x) {__.set(this, { x });}getX() {var { x } = __.get(this);return x;}
}

“但是现在您有一个内存泄漏,”  我胜利地反驳,闻到了胜利。 “该映射对您放入其中的每个类实例保持STRONG引用,从而通过在应用程序使用完后创建指向GC根的引用反向路径将其保留在内存中!”

“嗯……”  你想知道,抚摸着下巴,睁大眼睛。 “然后,我们将其设置为  WeakMap。”

const __ = new WeakMap();class Foo {constructor(x) {__.set(this, { x });}getX() {var { x } = __.get(this);return x;}
}

我:  没有反驳。满头大汗

ECMAScript 6 里面的私有变量相关推荐

  1. ES6系列之私有变量的实现

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在阅读 <ECMAScript 6 入门>的时候,零散的看到有私有变量的实现,所以在此总结一篇. 1. 约定 ...

  2. es5 温故而知新 创建私有成员、私有变量、特权变量的方法

    其实js是不支持私有变量的.哪怕到es6的class语法.虽然有许多变相的方式.但非常冗余而不推崇. 这里介绍的实际上也不是class语法,而是普通的函数,并且利用IIFE(闭包)的方式来实现私有. ...

  3. python定义私有变量的方法_Python怎么修改私有属性 如何访问python类中的私有方法...

    python 类为什么不能定义私有属性和方法 因为b.name[0] = 'zhang'修改的是类属性,类属性是全局的,所有的实例共享,如果想私有化,可以添加 def __init__( self ) ...

  4. Object-C 有私有变量?私有方法?

    从object-c 动态编译机制上讲是不存在私有变量和私有方法的.但是如果你不在.h中声明变量和方法在其它地方无法访问这些变量和方法,那么就成了私有的了.私有变量也可以使用@prviter进行修饰. ...

  5. Java私有变量是否可继承

    Java 父类中权限为private的私有变量,子类对象继承后,在其内存中其实也有该变量存在,只是不能直接引用该变量,而是需要通过调用父类public或protected的set或get等方法使用该变 ...

  6. java中子类对父类中的私有变量和私有方法有拥有权无使用权

    解释的我觉得也到位:子类拥对父类的私有变量具有拥有权 但是不具有使用权. 再和以前学的东西联系起来,总结如下: 1.不管父类中的成员变量是静态的还是非静态的,子类统统拥有(这里不用继承概念). 2.不 ...

  7. 【JS笔记】私有变量

    1.任何函数中定义的变量都可以认为是私有变量.函数内部可以访问,外部不能访问. 可以通过闭包创建特权方法访问私有变量. function Foo(){var n=10;this.returnN=fun ...

  8. 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

    文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...

  9. python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...

    本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...

最新文章

  1. Windows下curl使用
  2. 查看数据库大小_查看Oracle 数据库的每天归档量及数据库大小
  3. Cloudify — 系统架构
  4. python多线程共享全局变量_Python多线程-共享全局变量
  5. 用户空间文件系统(FUSE)
  6. 深度学习入门——波士顿房价预测
  7. jQuery Mobile主题使用与定制
  8. stm32CubeMx lwip + freeRTOS
  9. 【每日一题】一起冲击蓝桥杯吧——Day1【蓝桥真题】
  10. 物联网技术练习题(一)——单选题与判断题
  11. 计算机技术毕业生个人简历,计算机技术毕业生个人简历模板
  12. 计算机结构体系-CISC与RISC
  13. 小鸡小猪大历险java_小鸡和小猪
  14. C语言 数字实现字母表 链表实现字母表
  15. Tr1 Function
  16. 医学图像——CT值(Hu值)
  17. 零基础移动端APP设计与开发教程
  18. 在windows下jdk环境变量配置
  19. Acrel-5000型建筑能耗监测系统在西咸空港花园项目的研究与应用
  20. BUUCTF-一叶障目 解析

热门文章

  1. Git在windows环境下的使用教程
  2. CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了
  3. Linux 编程和系统管理新手入门
  4. WebSocket实战
  5. vins-mono后端优化
  6. Python目录下中没有Script文件夹
  7. JVM—内存分配与回收策略
  8. 读《C++ Primer(第三版)》的一些疑问(不断更新)
  9. java作业 景区门票
  10. redis-数据类型-string类型