慕課TS高級課程
第二章 深度掌握TypeScript OOP
2-10 TS 類 和 ES6 類對比
1. 為什么要理解 TS 類和 ES6 類的區(qū)別
TS 類和 ES6 類 看著很像权谁,但又有很多不同,區(qū)分 TS 類 和 ES6 類沪摄,既可以讓我們 對 TS 類 的優(yōu)勢印象更深刻播急,也會減少 TS 類 和 ES6 類 概念上的混淆提鸟。
2. 定義類屬性的方式不同
(1)TS 類有多種定義屬性的方式伏伐,如下:
方式1:先在類中定義屬性然后在構造函數中通過 this 賦值帕翻;
方式2:構造函數直接為參數增加 public,給構造器的參數如果加上 public萝风,這個參數就變成了一個屬性,
默認構造函數會給這個屬性賦值[隱式操作]熊咽,以上節(jié)課的 Order 類為例,具體代碼如下:
class Order {
constructor(public orderId: number, public date: Date,public custname: string,
public phone: string, public orderDetailArray: Array<OrderDetail>) {
// 無需this賦值
}
......
}
(2)ES6 依然沿襲了 JavaScript 賦值的方式闹丐,在構造函數直接 this 來定義屬性并賦值横殴,代碼如下:
class Order {
constructor(orderId, date, custname, phone, orderDetailArray) {
this.orderId = orderId;
this.date = date;
this.custname = custname;
this.phone = phone;
this.orderDetailArray = orderDetailArray;
}
}
3. ES6類沒有訪問修飾符,TS類自帶訪問修飾符
ES6類暫時還沒有訪問修飾符【public protected private】這也讓 ES6 類設置訪問權限變的異常麻煩卿拴,即使借助call 方法或者 symbol 類型設置了訪問權限局限性也很大衫仑,其實也并沒有真正徹底解決訪問權限的問題。這點讓ES6類在項目中對屬性和方法的權限控制很受限制堕花。 TS 類卻自帶 public protected private 三種訪問權限文狱,設置訪問權限輕松自如≡低欤【不設置默認訪問權限為 public 】 理解訪問修飾符很簡單瞄崇,后面我們講解完繼承后再講解,大家很快會理解壕曼。
4. TS 類是靜態(tài)類型語言的類苏研,而 ES6 類按照 JavaScript 的一個語法標準設計而成
TS 是靜態(tài)類型語言,具有類型注解和類型推導的能力腮郊,項目上線后隱藏語法和類型錯誤的的風險幾乎為零摹蘑,而ES6 是 JavaScript 的一個語法標準,沒有數據類型檢查的能力轧飞,舉一個簡單例子來說明問題衅鹿。
// ES6
const x = 3;
x = 10; // ES6沒有任何語法錯誤提示
// TS
const x = 3;
x = 10;//無法分配到 "x" ,因為它是常數过咬。
5. TS類可以生成ES5或ES6或以上版本的js文件
通過設置 tsconfig.json 文件的 target 屬性值為 ES6大渤,那么生成的js文件就是 ES6 版本的js文件