ECMAScript 6 里面的私有变量
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 里面的私有变量相关推荐
- ES6系列之私有变量的实现
2019独角兽企业重金招聘Python工程师标准>>> 前言 在阅读 <ECMAScript 6 入门>的时候,零散的看到有私有变量的实现,所以在此总结一篇. 1. 约定 ...
- es5 温故而知新 创建私有成员、私有变量、特权变量的方法
其实js是不支持私有变量的.哪怕到es6的class语法.虽然有许多变相的方式.但非常冗余而不推崇. 这里介绍的实际上也不是class语法,而是普通的函数,并且利用IIFE(闭包)的方式来实现私有. ...
- python定义私有变量的方法_Python怎么修改私有属性 如何访问python类中的私有方法...
python 类为什么不能定义私有属性和方法 因为b.name[0] = 'zhang'修改的是类属性,类属性是全局的,所有的实例共享,如果想私有化,可以添加 def __init__( self ) ...
- Object-C 有私有变量?私有方法?
从object-c 动态编译机制上讲是不存在私有变量和私有方法的.但是如果你不在.h中声明变量和方法在其它地方无法访问这些变量和方法,那么就成了私有的了.私有变量也可以使用@prviter进行修饰. ...
- Java私有变量是否可继承
Java 父类中权限为private的私有变量,子类对象继承后,在其内存中其实也有该变量存在,只是不能直接引用该变量,而是需要通过调用父类public或protected的set或get等方法使用该变 ...
- java中子类对父类中的私有变量和私有方法有拥有权无使用权
解释的我觉得也到位:子类拥对父类的私有变量具有拥有权 但是不具有使用权. 再和以前学的东西联系起来,总结如下: 1.不管父类中的成员变量是静态的还是非静态的,子类统统拥有(这里不用继承概念). 2.不 ...
- 【JS笔记】私有变量
1.任何函数中定义的变量都可以认为是私有变量.函数内部可以访问,外部不能访问. 可以通过闭包创建特权方法访问私有变量. function Foo(){var n=10;this.returnN=fun ...
- 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...
- python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...
本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...
最新文章
- Windows下curl使用
- 查看数据库大小_查看Oracle 数据库的每天归档量及数据库大小
- Cloudify — 系统架构
- python多线程共享全局变量_Python多线程-共享全局变量
- 用户空间文件系统(FUSE)
- 深度学习入门——波士顿房价预测
- jQuery Mobile主题使用与定制
- stm32CubeMx lwip + freeRTOS
- 【每日一题】一起冲击蓝桥杯吧——Day1【蓝桥真题】
- 物联网技术练习题(一)——单选题与判断题
- 计算机技术毕业生个人简历,计算机技术毕业生个人简历模板
- 计算机结构体系-CISC与RISC
- 小鸡小猪大历险java_小鸡和小猪
- C语言 数字实现字母表 链表实现字母表
- Tr1 Function
- 医学图像——CT值(Hu值)
- 零基础移动端APP设计与开发教程
- 在windows下jdk环境变量配置
- Acrel-5000型建筑能耗监测系统在西咸空港花园项目的研究与应用
- BUUCTF-一叶障目 解析