日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeScript class 的静态成员变量

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TypeScript class 的静态成员变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Static Members

類可能有靜態成員。 這些成員與類的特定實例無關。 它們可以通過類構造函數對象本身訪問:

class MyClass {static x = 0;static printX() {console.log(MyClass.x);} } console.log(MyClass.x); MyClass.printX();

Special Static Names

有一些特殊的名稱,不能用于 TypeScript class 的靜態成員變量定義。

從 Function 原型中覆蓋屬性通常是不安全/不可能的。 因為類本身就是可以用 new 調用的函數,所以不能使用某些靜態名稱。 名稱、長度和調用等函數屬性不能定義為靜態成員:

class S {static name = "S!"; Static property 'name' conflicts with built-in property 'Function.name' of constructor function 'S'. }

Generic Classes

類,很像接口,可以是通用的。 當使用 new 實例化泛型類時,其類型參數的推斷方式與函數調用中的推斷方式相同:

class Box<Type> {contents: Type;constructor(value: Type) {this.contents = value;} }const b = new Box("hello!");const b: Box<string>

Type Parameters in Static Members

下列代碼會出現語法錯誤:

class Box<Type> {static defaultValue: Type; Static members cannot reference class type parameters. }

請記住,類型總是被完全擦除! 在運行時,只有一個 Box.defaultValue 屬性槽。 這意味著設置 Box.defaultValue (如果可能的話)也會改變 Box.defaultValue - 不好。 泛型類的靜態成員永遠不能引用類的類型參數。

this at Runtime in Classes

重要的是要記住 TypeScript 不會改變 JavaScript 的運行時行為,而且 JavaScript 以具有一些特殊的運行時行為而聞名。

JavaScript 對此的處理確實不同尋常:

class MyClass {name = "MyClass";getName() {return this.name;} } const c = new MyClass(); const obj = {name: "obj",getName: c.getName, };// Prints "obj", not "MyClass" console.log(obj.getName());

長話短說,默認情況下,函數內 this 的值取決于函數的調用方式。 在這個例子中,因為函數是通過 obj 引用調用的,所以它的 this 值是 obj 而不是類實例。

這很少是你想要發生的! TypeScript 提供了一些方法來減輕或防止這種錯誤。

方法1 - 使用箭頭函數

如果您有一個經常以丟失 this 上下文的方式調用的函數,則使用箭頭函數屬性而不是方法定義是有意義的:

class MyClass {name = "MyClass";getName = () => {return this.name;}; } const c = new MyClass(); const g = c.getName; // Prints "MyClass" instead of crashing console.log(g());

這有一些權衡:

  • 即使對于未使用 TypeScript 檢查的代碼,此值也保證在運行時是正確的
  • 這將使用更多內存,因為每個類實例都有自己的以這種方式定義的每個函數的副本
  • 不能在派生類中使用 super.getName,因為原型鏈中沒有條目可以從中獲取基類方法

總結

以上是生活随笔為你收集整理的TypeScript class 的静态成员变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。