黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

TypeScript 類

TypeScript 類

TypeScript 是面向?qū)ο蟮?JavaScript。

類描述了所創(chuàng)建的對象共同的屬性和方法。

TypeScript 支持面向?qū)ο蟮乃刑匦裕热?類、接口等。

TypeScript 類定義方式如下:

class class_name { 
    // 類作用域
}

定義類的關(guān)鍵字為 class,后面緊跟類名,類可以包含以下幾個模塊(類的數(shù)據(jù)成員):

  • 字段 ? 字段是類里面聲明的變量。字段表示對象的有關(guān)數(shù)據(jù)。
  • 構(gòu)造函數(shù) ? 類范例化時調(diào)用,可以為類的對象分配內(nèi)存。
  • 方法 ? 方法為對象要執(zhí)行的操作。

創(chuàng)建一個 Person 類:

class Person {
}

編譯以上代碼,得到以下 JavaScript 代碼:

var Person = /** @class */ (function () {
    function Person() {
    }
    return Person;
}());

 

1. 創(chuàng)建類的數(shù)據(jù)成員

以下范例我們聲明了類 Car,包含字段為 engine,構(gòu)造函數(shù)在類范例化后初始化字段 engine。

this 關(guān)鍵字表示當前類范例化的對象。注意構(gòu)造函數(shù)的參數(shù)名與字段名相同,this.engine 表示類的字段。

此外我們也在類中定義了一個方法 disp()。

class Car { 
    // 字段 
    engine:string; 
 
    // 構(gòu)造函數(shù) 
    constructor(engine:string) { 
        this.engine = engine 
    }  
 
    // 方法 
    disp():void { 
        console.log("發(fā)動機為 :   "+this.engine) 
    } 
}

編譯以上代碼,得到以下 JavaScript 代碼:

var Car = /** @class */ (function () {
    // 構(gòu)造函數(shù) 
    function Car(engine) {
        this.engine = engine;
    }
    // 方法 
    Car.prototype.disp = function () {
        console.log("發(fā)動機為 :   " + this.engine);
    };
    return Car;
}()); 

 

2. 創(chuàng)建實例化對象

我們使用 new 關(guān)鍵字來實例化類的對象,語法格式如下:

var object_name = new class_name([ arguments ])

類實例化時會調(diào)用構(gòu)造函數(shù),例如:

var obj = new Car("Engine 1")

類中的字段屬性和方法可以使用 . 號來訪問:

// 訪問屬性
obj.field_name 

// 訪問方法
obj.function_name()

以下范例創(chuàng)建來一個 Car 類,然后通過關(guān)鍵字 new 來創(chuàng)建一個對象并訪問屬性和方法:

class Car { 
   // 字段
   engine:string; 
   
   // 構(gòu)造函數(shù)
   constructor(engine:string) { 
      this.engine = engine 
   }  
   
   // 方法
   disp():void { 
      console.log("函數(shù)中顯示發(fā)動機型號  :   "+this.engine) 
   } 
} 
 
// 創(chuàng)建一個對象
var obj = new Car("XXSY1")
 
// 訪問字段
console.log("讀取發(fā)動機型號 :  "+obj.engine)  
 
// 訪問方法
obj.disp()

編譯以上代碼,得到以下 JavaScript 代碼:

var Car = /** @class */ (function () {
    // 構(gòu)造函數(shù)
    function Car(engine) {
        this.engine = engine;
    }
    // 方法
    Car.prototype.disp = function () {
        console.log("函數(shù)中顯示發(fā)動機型號  :   " + this.engine);
    };
    return Car;
}());
// 創(chuàng)建一個對象
var obj = new Car("XXSY1");
// 訪問字段
console.log("讀取發(fā)動機型號 :  " + obj.engine);
// 訪問方法
obj.disp();

輸出結(jié)果為:

讀取發(fā)動機型號 :  XXSY1
函數(shù)中顯示發(fā)動機型號 :  XXSY1

 

3. 類的繼承

TypeScript 支持繼承類,即我們可以在創(chuàng)建類的時候繼承一個已存在的類,這個已存在的類稱為父類,繼承它的類稱為子類。

類繼承使用關(guān)鍵字 extends,子類除了不能繼承父類的私有成員(方法和屬性)和構(gòu)造函數(shù),其他的都可以繼承。

TypeScript 一次只能繼承一個類,不支持繼承多個類,但 TypeScript 支持多重繼承(A 繼承 B,B 繼承 C)。

語法格式如下:

class child_class_name extends parent_class_name

類的繼承:范例中創(chuàng)建了 Shape 類,Circle 類繼承了 Shape 類,Circle 類可以直接使用 Area 屬性:

class Shape { 
   Area:number 
   
   constructor(a:number) { 
      this.Area = a 
   } 
} 
 
class Circle extends Shape { 
   disp():void { 
      console.log("圓的面積:  "+this.Area) 
   } 
}
  
var obj = new Circle(223); 
obj.disp()

編譯以上代碼,得到以下 JavaScript 代碼:

var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var Shape = /** @class */ (function () {
    function Shape(a) {
        this.Area = a;
    }
    return Shape;
}());
var Circle = /** @class */ (function (_super) {
    __extends(Circle, _super);
    function Circle() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    Circle.prototype.disp = function () {
        console.log("圓的面積:  " + this.Area);
    };
    return Circle;
}(Shape));
var obj = new Circle(223);
obj.disp();

輸出結(jié)果為:

圓的面積:  223

需要注意的是子類只能繼承一個父類,TypeScript 不支持繼承多個類,但支持多重繼承,如下范例:

class Root { 
   str:string; 
} 
 
class Child extends Root {} 
class Leaf extends Child {} // 多重繼承,繼承了 Child 和 Root 類
 
var obj = new Leaf(); 
obj.str ="hello" 
console.log(obj.str)

編譯以上代碼,得到以下 JavaScript 代碼:

var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var Root = /** @class */ (function () {
    function Root() {
    }
    return Root;
}());
var Child = /** @class */ (function (_super) {
    __extends(Child, _super);
    function Child() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    return Child;
}(Root));
var Leaf = /** @class */ (function (_super) {
    __extends(Leaf, _super);
    function Leaf() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    return Leaf;
}(Child)); // 多重繼承,繼承了 Child 和 Root 類
var obj = new Leaf();
obj.str = "hello";
console.log(obj.str);

輸出結(jié)果為:

hello

 

4. 繼承類的方法重寫

類繼承后,子類可以對父類的方法重新定義,這個過程稱之為方法的重寫。

其中 super 關(guān)鍵字是對父類的直接引用,該關(guān)鍵字可以引用父類的屬性和方法。

class PrinterClass { 
   doPrint():void {
      console.log("父類的 doPrint() 方法。") 
   } 
} 
 
class StringPrinter extends PrinterClass { 
   doPrint():void { 
      super.doPrint() // 調(diào)用父類的函數(shù)
      console.log("子類的 doPrint()方法。")
   } 
}

編譯以上代碼,得到以下 JavaScript 代碼:

var obj = new StringPrinter() 
obj.doPrint()
 
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var PrinterClass = /** @class */ (function () {
    function PrinterClass() {
    }
    PrinterClass.prototype.doPrint = function () {
        console.log("父類的 doPrint() 方法。");
    };
    return PrinterClass;
}());
var StringPrinter = /** @class */ (function (_super) {
    __extends(StringPrinter, _super);
    function StringPrinter() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    StringPrinter.prototype.doPrint = function () {
        _super.prototype.doPrint.call(this); // 調(diào)用父類的函數(shù)
        console.log("子類的 doPrint()方法。");
    };
    return StringPrinter;
}(PrinterClass));
var obj = new StringPrinter();
obj.doPrint();

輸出結(jié)果為:

父類的 doPrint() 方法。
子類的 doPrint()方法。

 

5. static 關(guān)鍵字

static 關(guān)鍵字用于定義類的數(shù)據(jù)成員(屬性和方法)為靜態(tài)的,靜態(tài)成員可以直接通過類名調(diào)用。

class StaticMem {  
   static num:number; 
   
   static disp():void { 
      console.log("num 值為 "+ StaticMem.num) 
   } 
} 
 
StaticMem.num = 12     // 初始化靜態(tài)變量
StaticMem.disp()       // 調(diào)用靜態(tài)方法

編譯以上代碼,得到以下 JavaScript 代碼:

var StaticMem = /** @class */ (function () {
    function StaticMem() {
    }
    StaticMem.disp = function () {
        console.log("num 值為 " + StaticMem.num);
    };
    return StaticMem;
}());
StaticMem.num = 12; // 初始化靜態(tài)變量
StaticMem.disp(); // 調(diào)用靜態(tài)方法

輸出結(jié)果為:

num 值為 12

 

6. instanceof 運算符

instanceof 運算符用于判斷對象是否是指定的類型,如果是返回 true,否則返回 false。

class Person{ } 
var obj = new Person() 
var isPerson = obj instanceof Person; 
console.log("obj 對象是 Person 類范例化來的嗎? " + isPerson);

編譯以上代碼,得到以下 JavaScript 代碼:

var Person = /** @class */ (function () {
    function Person() {
    }
    return Person;
}());
var obj = new Person();
var isPerson = obj instanceof Person;
console.log(" obj 對象是 Person 類范例化來的嗎? " + isPerson);

輸出結(jié)果為:

obj 對象是 Person 類范例化來的嗎? true

 

7. 訪問控制修飾符

TypeScript 中,可以使用訪問控制符來保護對類、變量、方法和構(gòu)造方法的訪問。TypeScript 支持 3 種不同的訪問權(quán)限。

  • public(默認) : 公有,可以在任何地方被訪問。

  • protected : 受保護,可以被其自身以及其子類和父類訪問。

  • private : 私有,只能被其定義所在的類訪問。

以下范例定義了兩個變量 str1 和 str2,str1 為 public,str2 為 private,范例化后可以訪問 str1,如果要訪問 str2 則會編譯錯誤。

class Encapsulate { 
   str1:string = "hello" 
   private str2:string = "world" 
}
 
var obj = new Encapsulate() 
console.log(obj.str1)     // 可訪問 
console.log(obj.str2)   // 編譯錯誤, str2 是私有的

 

8. 類和接口

類可以實現(xiàn)接口,使用關(guān)鍵字 implements,并將 interest 字段作為類的屬性使用。

以下范例紅 AgriLoan 類實現(xiàn)了 ILoan 接口:

interface ILoan { 
   interest:number 
} 
 
class AgriLoan implements ILoan { 
   interest:number 
   rebate:number 
   
   constructor(interest:number,rebate:number) { 
      this.interest = interest 
      this.rebate = rebate 
   } 
} 
 
var obj = new AgriLoan(10,1) 
console.log("利潤為 : "+obj.interest+",抽成為 : "+obj.rebate )

編譯以上代碼,得到以下 JavaScript 代碼:

var AgriLoan = /** @class */ (function () {
    function AgriLoan(interest, rebate) {
        this.interest = interest;
        this.rebate = rebate;
    }
    return AgriLoan;
}());
var obj = new AgriLoan(10, 1);
console.log("利潤為 : " + obj.interest + ",抽成為 : " + obj.rebate);

輸出結(jié)果為:

利潤為 : 10,抽成為 : 1

下一節(jié):TypeScript 對象

TypeScript 教程

相關(guān)文章