1. 程式人生 > >typescript 中通過建構函式的引數直接定義屬性

typescript 中通過建構函式的引數直接定義屬性

在通常情況下,我們定義一個類時:

class Info {

    public name: string

    private age: number

    constructor() {
        // ...
    }
}

採用 ts 中簡寫的語法:

class Info {
    constructor(
        public name: string
        private age: number ) {}
}

它可能看上去不像是有屬性的類,但它確實有,利用的是 Typescript 提供的簡寫形式 — 用建構函式的引數直接定義屬性。

這個簡寫語法做了很多:

  • 聲明瞭一個建構函式引數及其型別
  • 聲明瞭一個同名的公共屬性
  • 當我們 new 出該類的一個例項時,把該屬性初始化為相應的引數值

ng4 中,就可以通過此種寫法來注入服務。

對比轉換前後的程式碼如下:

這裡寫圖片描述

相關推薦

typescript 通過建構函式引數直接定義屬性

在通常情況下,我們定義一個類時: class Info { public name: string private age: number constructor()

C++為什麼建構函式不能定義為虛擬函式

關於C++為什麼不支援虛擬建構函式,Bjarne很早以前就在C++Style and Technique FAQ裡面做過回答 Avirtual call is a mechanism to get work done given partialinformation. In particular

android RectF建構函式引數說明

Create a new rectangle with the specified coordinates. Note: no range checking is performed, so the caller must ensure that left <= right and top <

定義View建構函式引數理解

自定義的屬性使用 1、通過<declare-styleable>為自定義View新增屬性 2、在xml中為相應的屬性值 3、在執行時(一般為建構函式)獲取屬性值 4、將獲取到得屬性值應用到View 自定義Style <?xm

為什麼C++拷貝建構函式引數型別必須是引用?

  在C++中, 建構函式,拷貝建構函式,解構函式和賦值函式(賦值運算子過載)是最基本不過的需要掌握的知識。 但是如果我問你“拷貝建構函式的引數為什麼必須使用引用型別?”這個問題, 你會怎麼回答? 或許你會回答為了減少一次記憶體拷貝? 很慚愧的是,我的第一感覺也是這麼回答

通過建構函式檢查生成物件個數

程式碼為 1 package CheckObjectNumber; 2 3 public class CheckObjectNumber { 4 private static int num=0;//定義一個靜態成員num ,用於檢測執行建構函式的次數 5 public C

派生類建構函式

派生類不能繼承基類的建構函式,必須自己定義建構函式進行新增資料成員初始化工作,如果想同時初始化基類資料成員,必須呼叫基類建構函式。 例如: 1 class stu1 2 { 3 public: 4 stu1(int i, string strn, double in) 5

面試題:不通過建構函式也能建立物件嗎

不通過建構函式也能建立物件嗎 A. 是 B. 否 答案:A 解析:Java 建立物件的幾種方式(重要): (1) 用 new 語句建立物件,這是最常見的建立物件的方法。 (2) 運用反射手段,呼叫 java.lang.Class 或者 java.l ang.reflect.Constru

JS建構函式與與原型物件的理解

一:JS中的建構函式 在這裡可以這樣理解建構函式 ,即構造一個物件的函式就叫做建構函式; 1:那麼我們使用建構函式的目的是構造一個物件 ,如何構造一個物件就是我下面要說的: 在JavaScript中,任何合法的函式都可以作為物件的建構函式,這包括系統內建的函式, 也包括自己定義的函式

Vue通過路由傳遞引數

Vue中可以通過路由傳遞引數,具體實現也比較方便 以 '/aaa/bbb?引數名='+引數值格式傳遞引數 let self = this; let toPath = '/aaa/bbb?recordedSpeed='+self.recordedSpeed; self.$router.

通過建構函式來建立類的例項 - Unsafe的使用

我們知道,當使用反射構造類的例項時,我們常會用到xxx.class.newInstance()這個方法。但是這個方法有一個限制,就是要求類必須有預設的建構函式。但我們在做框架的時候,很難保證要動態構造的類例項,都是有預設建構函式的,那怎麼辦呢?   其實用過C++或者Delphi的

java繼承--子父類建構函式

1 子父類建構函式的特點 在子類構造物件時,發現,訪問子類建構函式時,父類建構函式也運行了。 原因是:在子類的建構函式中第一行有一個預設的隱式語句。 super(); 類似於this(); this();呼叫的是本類的建構函式 子類建構函式預設呼叫的是父類中的空引數建構函式

4、獲取Class建構函式

4、獲取Class中的建構函式 4.1 早期建立物件 早期建立物件,先根據被new的類的名稱找尋該類的位元組碼檔案,並載入進記憶體,並建立該位元組碼檔案物件,並接著建立該接檔案的對應的Person物件 com.hw.bean.Person p = new com.hw.bean.Person(

【FastReport教程】如何在報表設計器使用帶有函式的自定義

在報表設計器中的內建函式庫並不是很小,但有時候仍然缺乏一些特定的功能。由於報表中的指令碼,可以輕鬆實現所需的功能。但是,如果許多記錄中需要此功能呢?每次都將它新增到報表指令碼中?當然不是。可以在連線到報表設計器的庫中收集所有需要的函式。需要庫與報表位於同一資料夾中,建立一

C++預設建構函式建構函式初始化列表

1、預設建構函式和建構函式 (1)建構函式:C++用於構建類的新物件時需要呼叫的函式,該函式無返回型別!(注意:是“無”! 不是空!(void))。 (2)預設建構函式:預設建構函式是在呼叫時不需要顯示地傳入實參的建構函式。 一個類如果自己沒有定義建構函式,則會有一個無參且函式體也是空的

JavaScript建構函式和工廠函式

JavaScript中的工廠函式 1 function crateHero (name,blood,weapoon) { 2 var o = new Object(); 3 o.name = name; 4 o.blood =

Java類的組合與繼承 小問題分析(建構函式引數的傳遞方法 、資料隱藏的處理: 對比C++)

一、類的組合:     1、初始化問題(建構函式的引數傳遞方法):       在C++中,通常只要物件中不含有指標類資料的話,物件與物件之間是可以相互賦值且不會出錯的,因此組合出來的類完全可以將傳遞過來的物件引數直接賦值給對應資料成員;       而在java中,物

Javascript函式及自定義屬性

一.函式 1.函式:將一系列程式碼或者操作行為打包到一起形成的內容就是函式,是一塊有特定功能的程式碼。 2.函式的分類 a.具名函式:有函式名的就是具名函式 function foo(){//foo就是函式的名字,function表示函式的宣告,看不到表現效果

C++複製建構函式引數問題

今天遇到一個題, #include <iostream> using namespace std; class Sample { public: int v; // 在此處補充你的程式碼 }; void PrintAndDouble(Sample o) { c

C++建構函式和解構函式

1:建構函式 處理物件的初始化。特殊的成員函式,不需要使用者來呼叫,而是在建立物件的時候自動執行。 特點: ①與類名相同 ②沒有任何返回型別 ③定義時可以有引數,可以無引數 2:解構函式 語法 :~cl