国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解JavaScript 新語法之Class 的私有屬性與私有方法

2024-05-06 15:40:16
字體:
來源:轉載
供稿:網友

譯者按: 為什么偏要用 # 符號?

原文:JavaScript's new #private class fields
•譯者:Fundebug

本文采用意譯,版權歸原作者所有

proposal-class-fieldsproposal-private-methods定義了 Class 的私有屬性以及私有方法,這 2 個提案已經處于 Stage 3,這就意味著它們已經基本確定下來了,等待被加入到新的 ECMAScript 版本中。事實上,最新的 Chrome 已經支持了 Class 私有屬性。

那么,對于 Class 的私有屬性與私有方法,它們究竟是什么呢?它們是怎樣工作的?為什么要使用#符號來定義呢?

Class 的私有屬性語法如下:

class Point { #x; #y; constructor(x, y) {  this.#x = x;  this.#y = y; } equals(point) {  return this.#x === point.#x && this.#y === point.#y; }}

我們可以將其語法理解為 2 個部分:

•定義 Class 私有屬性
•引用 Class 私有屬性

定義 Class 私有屬性

私有屬性與公共屬性的定義方式幾乎是一樣的,只是需要在屬性名稱前面添加#符號:

class Foo { publicFieldName = 1; #privateFieldName = 2;}

定義私有屬性的時候也可以不用賦值:

class Foo { #privateFieldName;}

引用 Class 私有屬性

引用私有屬性也只需要使用#就好了。

class Foo { publicFieldName = 1; #privateFieldName = 2; add() {  return this.publicFieldName + this.#privateFieldName; }}

其中,this.#可以簡化,去掉 this 也沒問題,下面兩種寫法是等價的:

method() { #privateFieldName;}method() { this.#privateFieldName;}

在 Class 定義中引用 Class 實例的私有屬性

對于私有屬性,我們是不可以直接通過 Class 實例來引用的,這也是私有屬性的本來含義。但是有一種情況除外,在 Class 定義中,我們可以引用 Class 實例的私有屬性:

class Foo { #privateValue = 42; static getPrivateValue(foo) {  return foo.#privateValue; }}

Foo.getPrivateValue(new Foo()); // >> 42

其中,foo是Foo的實例,在 Class 定義中,我們可以通過 foo 來引用私有屬性#privateValue。

Class 的私有方法

Class 的私有屬性是提案proposal-class-fields的一部分,這個提案只關注 Class 的屬性,它并沒有對 Class 的方法進行任何修改。而 Class 的私有方法是提案proposal-class-fields的一部分。

Class 的私有方法語法如下:

class Foo { constructor() {  this.#method(); } #method() {  // ... }}

我們也可以將函數賦值給私有屬性:

class Foo { constructor() {  this.#method(); } #method = () => {  // ... };}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 丰台区| 杭州市| 保靖县| 兴化市| 章丘市| 板桥市| 嘉兴市| 洪泽县| 德惠市| 萨迦县| 夏津县| 桃园市| 宁德市| 防城港市| 土默特右旗| 庆阳市| 泸州市| 鄢陵县| 尉氏县| 定兴县| 蓬安县| 建阳市| 哈密市| 清苑县| 德兴市| 潞西市| 化德县| 封开县| 夹江县| 淮北市| 高雄市| 花莲市| 格尔木市| 吉林省| 三亚市| 昭觉县| 台东市| 永德县| 郎溪县| 莲花县| 广饶县|