Typescript 學習筆記四:回憶ES5 中的類
阿新 • • 發佈:2018-12-31
目錄:
- Typescript 學習筆記一:介紹、安裝、編譯
- Typescript 學習筆記二:資料型別
- Typescript 學習筆記三:函式
- Typescript 學習筆記四:回憶Es5 中的類
- Typescript 學習筆記五:類
- Typescript 學習筆記六:介面
- Typescript 學習筆記七:泛型
最簡單的類
function Person (name, age) { // 建構函式 this.name = name; // 屬性 this.age = age; } var p = new Person('張三', 25); // 例項化物件,p 為 Person 的一個例項 console.log(p.name);
函式名首字母大寫,函式內用 this 處理的函式稱為建構函式。
用 new 關鍵字例項化建構函式的變數是該建構函式的例項。
類定義屬性和方法
可以在建構函式和原型鏈上定義屬性和方法。
function Person (name, age) { // 建構函式內定義屬性和方法 this.name = name; // 例項屬性 this.age = age; this.run = function () { // 例項方法 console.log(this.name + '在運動'); } } // 原型鏈上定義屬性和方法 Person.prototype.sex = '男'; Person.prototype.work = function () { console.log(this.name + '在工作'); } var p = new Person('張三', 25); p.run(); // 呼叫例項方法 p.work();
原型鏈上面的屬性會被多個例項共享,建構函式裡的屬性不會
類的靜態屬性和方法
直接給建構函式設定屬性和方法,不需要例項化即可獲得的。
建構函式內的屬性和方法,原型鏈上的屬性和方法都需要例項化之後才可獲得。
function Person (name, age) { // 建構函式內定義屬性和方法 this.name = name; // 屬性 this.age = age; this.run = function () { // 方法 console.log(this.name + '在運動'); } } // 靜態屬性、方法 Person.address = 'xxx'; Person.getInfo = function () { console.log('靜態方法'); } // 呼叫 console.log(Person.address); Person.getInfo(); Person.run(); // 錯誤,只有例項物件才可呼叫 var p = new Person(); p.run();
繼承:物件冒充實現
物件冒充可以繼承建構函式裡面的屬性和方法,但是沒法繼承原型鏈上面的屬性和方法
// 父類
function Person (name, age) {
this.name = name;
this.age = age;
this.run = function () {
console.log(this.name + '在運動');
}
}
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
}
// 子類繼承父類
function Child () {
Person.call(this); // 物件冒充實現繼承
}
var c = new Child('張三', 25);
c.run();
c.work(); // 錯誤,沒有 work 方法
繼承:原型鏈實現
原型鏈繼承:可以繼承建構函式裡面的屬性和方法,也可以繼承原型鏈上面的屬性和方法。但是例項化子類的時候沒法給父類傳參。
// 父類
function Person (name, age) {
this.name = name;
this.age = age;
this.run = function () {
console.log(this.name + '在運動');
}
}
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
}
// 子類繼承父類
function Child (name, age) {
}
Child.prototype = new Person(); // 原型鏈實現繼承
var c = new Child('張三', 25);
c.run(); // undefined 在運動
c.work(); // undefined 在工作
繼承:原型鏈+物件冒充的組合繼承模式
原型鏈繼承:可以繼承建構函式裡面的屬性和方法,也可以繼承原型鏈上面的屬性和方法。但是例項化子類的時候沒法給父類傳參。
// 父類
function Person (name, age) {
this.name = name;
this.age = age;
this.run = function () {
console.log(this.name + '在運動');
}
}
Person.prototype.sex = '男';
Person.prototype.work = function () {
console.log(this.name + '在工作');
}
// 子類繼承父類
function Child (name, age) {
Person.call(this, name, age); // 物件冒充繼承,例項化子類可以給父類傳參
}
Child.prototype = new Person(); // 原型鏈實現繼承,繼承原型鏈上的屬性和方法
// 或者
// Child.prototype = Person.prototype; // 原型鏈實現繼承,繼承原型鏈上的屬性和方法
var c = new Child('張三', 25);
c.run(); // 張三在運動
c.work(); // 張三在工作