加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

JavaScript私有属性要来了,但达成方式惹争议

发布时间:2021-11-12 15:20:49 所属栏目:教程 来源:互联网
导读:我们介绍了JavaScript的三个新特性,现在,一个广受期待的新特性:私有属性也离我们越来越近了。 昨天,TC39在GitHub上通过了一条EMCAScript语法特性的草案,即类私有属性修饰符#,不过,该特性之前在社区的调研中遭遇了大量反对。 该修饰符的使用方式如下:

我们介绍了JavaScript的三个新特性,现在,一个广受期待的新特性:私有属性也离我们越来越近了。
 
昨天,TC39在GitHub上通过了一条EMCAScript语法特性的草案,即类私有属性修饰符“#”,不过,该特性之前在社区的调研中遭遇了大量反对。
 
该修饰符的使用方式如下:
 
class Counter extends HTMLElement {
  #x = 0;
 
 
  clicked() {
    this.#x++;
    window.requestAnimationFrame(this.render.bind(this));
  }
 
 
  constructor() {
    super();
    this.onclick = this.clicked.bind(this);
  }
 
 
  connectedCallback() { this.render(); }
 
 
  render() {
    this.textContent = this.#x.toString();
  }
}
window.customElements.define('num-counter', Counter);
类的私有属性和方法使用“#”前缀作为修饰符,即代表该属性或方法作用域仅限于类的块级作用域内,你不能在之外对其进行引用。
 
该语法引起了社区大量反对,在该语法草案的一个issue内,有人做了一个调研,显示社区对于这条草案并不认同:
 
 
 
社区对这条草案的主要担忧包括:
 
“#”是CSS中的id选择器,在JS中作为私有属性修饰符可能引起混乱,降低代码可读性
“#”在部分编程语言里是作为注释的语法,JS里使用它会引起混乱
TypeScript之前已经实现过私有属性,其修饰符为`private`,现在实现不一致造成认知负担
这一草案早在2017年7月已进入stage 3状态,要改变是很艰难的,TC39委员会之所以通过,是因为他们认为对于这一草案,委员会和社区已经达成共识,即使有开发者认为这一共识并不存在。
 
而委员会反对上面调研结果的理由是认为在GitHub issue去的该调研吸引的反对者偏多,该草案的赞同者大多不会到issue区表达意见。
 
另还有委员会成员在该issue下回答之所以不采用和TypeScript相同的实现,是要刻意与TypeScript保持不同,以免偏离JS的发展方向。

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读