免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

JavaScript 即将加入私有字段和私有方法

  • 2019-10-15
  • 本文字数:899 字

    阅读完需:约 3 分钟

JavaScript即将加入私有字段和私有方法

尽管 JavaScript 在 2015 年就有了类,但仍然没有私有字段和私有方法。由于TC39委员会内部存在分歧,这些功能在最初版本中被取消。有三个规范草案打算在不久的将来将这些功能引入到 JavaScript 类中。


一旦这些规范被正式接受,就可以使用“#”符号来定义私有字段和私有方法。之所以决定使用‘#’符号而不是传统的下划线“_”,是为了避免对现有库造成太大影响,现在的库已经使用下划线来标记私有字段。


尽管现有的库使用下划线将字段或方法标记为私有,但开发人员仍然可以访问它们。将这些变量变成真正的私有可能会破坏很多现有的应用程序,从而降低新规范的采用速度。


React 中的一些东西可以用来说明这个问题。React 是一个流行的 JavaScript 框架,它不得不使用一些直白的变量名来阻止开发人员使用它们(尽管这些变量名被标记为私有),比如“_SECRET_DOM_DO_NOT_USE_ORYOU_WILL_BE_FIRED”。


TC39 的每个提案分别与类私有字段和私有方法的某个方面有关。不过将它们作为一个整体提案应该是没问题的,因为它们很可能同时被添加到 JavaScript 中。提案内容如下:

类字段声明

目前在 JavaScript 中还不能直接定义类字段,开发人员是在构造函数中定义这些字段的。


class Counter {   constructor() {     this.xValue = 0;   } }
复制代码


该提案增加了直接在类中定义公共和私有字段的能力。


class Counter {   xValue = 0;  #yValue = 0;  constructor() { }}
复制代码

类的私有方法和 GETTER/SETTER 方法

该提案与私有方法的添加和私有 getter/setter 的使用有关。


class Counter {   get #x() { return #xValue; }   set #x(value) { }
#clicked() { } }
复制代码

类的静态特性

该提案定义了私有和公共静态字段/方法的使用方式。


class CustomDate {   static public() = {}   static #private() = {} }
复制代码


需要注意的是,过度使用私有字段和私有方法可能会对代码库造成不利影响。私有方法不能使用单元测试进行测试,并且通常带有单一职责原则固有的问题。


私有字段和私有方法还没有正式被 JavaScript 接受,但开发人员已经可以在 Babel 中使用它们了。TypeScript 的实现版本目前正在开发当中,未来会发布。


原文链接


Coming Next, JavaScript Private Class Fields & Methods


2019-10-15 16:202466
用户头像

发布了 731 篇内容, 共 447.5 次阅读, 收获喜欢 2001 次。

关注

评论 2 条评论

发布
用户头像
很奇怪。。。typescript 一开始就有private,public 还有protected 字段。不管如何定义,编译到的es5的版本的js,都可以参与单元测试的吧。
2019-10-16 20:10
回复
typescript只是在自己的环境下,自己特色的东西才有对应的限制,如果编译成标准js后一样要符合js的标准,所有ts的特性就是失效的,并不冲突呀
2019-11-11 15:02
回复
没有更多了
发现更多内容

23w字!Github一夜爆火被各大厂要求直接下架的Java面试题库也太强了

Java架构师迁哥

登陆框有多危险,可能你还不知道。。。

网络安全学海

黑客 网络安全 信息安全 渗透测试· 漏洞分析

网络传输协议kcp原理解析

赖猫

TCP 网络协议

Vue进阶(五十八):ES字符串操作:遍历、比较、截取、补全...

No Silver Bullet

Vue ES 字符串 7月日更

iOS15上线图片翻译功能,能取代专业翻译软件吗?

脑极体

C++17 中的条件变量

hedzr

c++ 算法 并发编程 元编程 policy

Vue进阶(五十七):ES数组操作:find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()

No Silver Bullet

Vue ES 7月日更 数组操作

密码学系列之:Merkle–Damgård结构和长度延展攻击

程序那些事

加密解密 密码学 程序那些事

开跑!Mobileye自动驾驶汽车路测落地纽约

E科讯

和12岁小同志搞创客开发:如何使用继电器?

不脱发的程序猿

DIY 嵌入式 创客开发 继电器

week 9 作业

Geek_2e7dd7

架构实战营

并发问题的源头

Java旅程

Java 并发编程

阿里培训笔记惨遭泄露,Spring+SpringBoot+SpringCloud

Java架构师迁哥

Python OpenCV 图像的 最近邻插值 与 双线性插值算法 优化迭代

梦想橡皮擦

Python 7月日更

携手生态伙伴亮相InfoComm,英特尔赋能智能协作办公

E科讯

价值连城 知名深度强化学习Pieter Abbeel的采访 John 易筋 ARTS 打卡 Week 56

John(易筋)

ARTS 打卡计划

linux c解决多个第三方so动态库包含不同版本openssl造成的符号冲突

奔着腾讯去

openssl so动态库 动态链接库

手写Spring框架,是时候撸个AOP与Bean生命周期融合了!

小傅哥

Java spring 小傅哥 aop 代理

maven是什么

卢卡多多

7月日更

Linux之date命令

入门小站

Linux

Discourse 的标签(Tag)只能是小写的原因

HoneyMoose

Rust从0到1-面向对象编程-设计模式

rust 设计模式 面向对象编程 状态模式 state pattern

网络协议:TCP可靠传输原理

赖猫

c++ TCP 后端 网络协议

一个很多人不知道的SpringBoot小技能!!

冰河

Java 分布式 微服务 springboot 服务化

结构化流-Structured Streaming(八-中)

Databri_AI

spark 结构化思维 Kafk

后疫情时代,共享育儿也能变成一门好生意?!

脑极体

在线时间加减计算器

入门小站

工具

王者荣耀商城异地多活架构设计

chenmin

ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

程序员小航

Java zookeeper 源码 分布式锁 zookeeper分布式锁

巧用 readonly与 const

喵叔

7月日更

没有电和网络的时候如何支付一瓶水?

escray

学习 极客时间 朱赟的技术管理课 7月日更

JavaScript即将加入私有字段和私有方法_编程语言_Guy Nesher_InfoQ精选文章