精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

TypeScript 類(lèi)

TypeScript 類(lèi)

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

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

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

TypeScript 類(lèi)定義方式如下:

class class_name { 
    // 類(lèi)作用域
}

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

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

創(chuàng)建一個(gè) Person 類(lèi):

class Person {
}

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

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

 

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

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

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

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

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

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

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

 

2. 創(chuàng)建實(shí)例化對(duì)象

我們使用 new 關(guān)鍵字來(lái)實(shí)例化類(lèi)的對(duì)象,語(yǔ)法格式如下:

var object_name = new class_name([ arguments ])

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

var obj = new Car("Engine 1")

類(lèi)中的字段屬性和方法可以使用 . 號(hào)來(lái)訪問(wèn):

// 訪問(wèn)屬性
obj.field_name 

// 訪問(wèn)方法
obj.function_name()

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

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

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

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

輸出結(jié)果為:

讀取發(fā)動(dòng)機(jī)型號(hào) :  XXSY1
函數(shù)中顯示發(fā)動(dòng)機(jī)型號(hào) :  XXSY1

 

3. 類(lèi)的繼承

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

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

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

語(yǔ)法格式如下:

class child_class_name extends parent_class_name

類(lèi)的繼承:范例中創(chuàng)建了 Shape 類(lèi),Circle 類(lèi)繼承了 Shape 類(lèi),Circle 類(lèi)可以直接使用 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

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

class Root { 
   str:string; 
} 
 
class Child extends Root {} 
class Leaf extends Child {} // 多重繼承,繼承了 Child 和 Root 類(lèi)
 
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 類(lèi)
var obj = new Leaf();
obj.str = "hello";
console.log(obj.str);

輸出結(jié)果為:

hello

 

4. 繼承類(lèi)的方法重寫(xiě)

類(lèi)繼承后,子類(lèi)可以對(duì)父類(lèi)的方法重新定義,這個(gè)過(guò)程稱之為方法的重寫(xiě)。

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

class PrinterClass { 
   doPrint():void {
      console.log("父類(lèi)的 doPrint() 方法。") 
   } 
} 
 
class StringPrinter extends PrinterClass { 
   doPrint():void { 
      super.doPrint() // 調(diào)用父類(lèi)的函數(shù)
      console.log("子類(lèi)的 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("父類(lèi)的 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)用父類(lèi)的函數(shù)
        console.log("子類(lèi)的 doPrint()方法。");
    };
    return StringPrinter;
}(PrinterClass));
var obj = new StringPrinter();
obj.doPrint();

輸出結(jié)果為:

父類(lèi)的 doPrint() 方法。
子類(lèi)的 doPrint()方法。

 

5. static 關(guān)鍵字

static 關(guān)鍵字用于定義類(lèi)的數(shù)據(jù)成員(屬性和方法)為靜態(tài)的,靜態(tài)成員可以直接通過(guò)類(lè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 運(yùn)算符

instanceof 運(yùn)算符用于判斷對(duì)象是否是指定的類(lèi)型,如果是返回 true,否則返回 false。

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

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

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

輸出結(jié)果為:

obj 對(duì)象是 Person 類(lèi)范例化來(lái)的嗎? true

 

7. 訪問(wèn)控制修飾符

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

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

  • protected : 受保護(hù),可以被其自身以及其子類(lèi)和父類(lèi)訪問(wèn)。

  • private : 私有,只能被其定義所在的類(lèi)訪問(wèn)。

以下范例定義了兩個(gè)變量 str1 和 str2,str1 為 public,str2 為 private,范例化后可以訪問(wèn) str1,如果要訪問(wèn) str2 則會(huì)編譯錯(cuò)誤。

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

 

8. 類(lèi)和接口

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

以下范例紅 AgriLoan 類(lèi)實(shí)現(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("利潤(rùn)為 : "+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("利潤(rùn)為 : " + obj.interest + ",抽成為 : " + obj.rebate);

輸出結(jié)果為:

利潤(rùn)為 : 10,抽成為 : 1

下一節(jié):TypeScript 對(duì)象

TypeScript 教程

相關(guān)文章