【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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:202383
用户头像

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

关注

评论 2 条评论

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

【Python实战】Python对中国500强排行榜数据进行可视化分析

BROKEN

三周年连更

当⻉借⼒阿⾥云落地云原⽣架构转型,运维降本、效率稳定性双升

阿里巴巴云原生

阿里云 云原生 云原生架构

今天,飞桨公众号六岁啦!

飞桨PaddlePaddle

飞桨PaddlePaddle

百度平地起“雷”,突然爆出的QPS数据意味着什么?

脑极体

大模型

缓存的处理步骤

阿泽🧸

缓存 三周年连更

Cloud Kernel SIG月度动态:发布 Anolis 8.8 镜像、kABI 社区共建流程

OpenAnolis小助手

镜像 龙蜥社区 sig kernel 月报

各行业常见的业务指标汇总(数据分析常用数据指标)

Data 探险实验室

数据分析 数据分析师 数据指标 指标中台; 数据分析 指标洞察

使用 Kubectl Patch 命令更新资源

Se7en

云原生

音视频八股文(4)--ffmpeg常见命令(3)

福大大架构师每日一题

音视频 ffmpeg

数字未来:世界正走向新的“破茧时刻”

脑极体

华为

重构这件“小”事儿 | 得物技术

得物技术

关于容器云的三种网络设计

穿过生命散发芬芳

容器云 三周年连更

2022-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver

福大大架构师每日一题

golang 算法 rust

新手如何学好Zbrush3D建模?

Finovy Cloud

3D软件

算法刷题-移除元素、分数到小数、整数转罗马数字

共饮一杯无

数据结构 算法 三周年连更

学会 Go select 语句,轻松实现高效并发

陈明勇

Go golang 高并发 select 三周年连更

Docgeni 2.1 正式发布

PingCode研发中心

软件开发 Docgeni

Django笔记十五之in查询及date日期相关过滤操作

Hunter熊

Python django 日期

世界读书日|华为阅读联合40余家伙伴推出精品书单

最新动态

CorelDRAW Graphics Suite2023最新中文版下载

茶色酒

cdr2023

【已结束】直播预告|传统 PvE 游戏 ∕ 开房间 PvP 游戏的云原生架构升级

阿里巴巴云原生

阿里云 云原生 游戏

2023年3月用户体验GX评测:国有行及股份行持续领跑,城商行及农商行农信社积极探索实践用户体验体系搭建

易观分析

金融 银行

【深入浅出Spring原理及实战】「源码调试分析」深入源码探索Spring底层框架的的refresh方法所出现的问题和异常

洛神灬殇

spring NPE 源码剖析 4月日更 问题分析

测试需求平台8-Arco组件实现产品增改需求

MegaQi

测试平台开发 三周年连更 AcroVue

ChatGPT辅助编写自动化测试

QE_LAB

单元测试 自动化测试 接口测试 测试技术 ChatGPT

TypeScript Module

程序员海军

三周年连更

Tuxera NTFS2024免费版NTFS磁盘读写软件

茶色酒

Tuxera NTFS2024

活动回顾|微服务x容器开源开发者 Meetup 成都站回放 & PPT 下载

阿里巴巴云原生

阿里云 开源 容器 微服务 云原生

预训练对话大模型深度解读

轻口味

AI 大模型 三周年连更

基于 Amazon SageMaker 构建细粒度情感分析应用

亚马逊云科技 (Amazon Web Services)

机器学习 Amazon SageMaker

CnosDB成为首个支持sqllogictest的时序数据库,稳定性与可靠性再升级

CnosDB

数据库 开源 时序数据库 CnosDB

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