中文網:https://www.tslang.cn/css
目錄:jquery
function Person (name) { this.name=name; this.run = function () { console.log(this.name) } } var p = new Person('張三'); p.run();
class
關鍵詞。class Person { name:string; // 屬性,前面省略了 public 關鍵詞 constructor (name:string) { // 構造函數,實例化類的時候觸發的方法 this.name = name; } run ():void { console.log(`${this.name}在運動`); } getName ():string { return this.name; } setName (name:string):void { this.name = name; } } let p = new Person('李四'); p.run(); p.setName('王五'); console.log(p.getName());
使用關鍵詞extends
、super
。typescript
// 父類 class Person { name:string; // 屬性,前面省略了 public 關鍵詞 constructor (name:string) { // 構造函數,實例化類的時候觸發的方法 this.name = name; } run ():void { console.log(`${this.name}在運動`); } } let p = new Person('李四'); p.run(); // 李四在運動 // 子類繼承父類 class Child extends Person { constructor (name:string) { super(name); // 初始化父類的構造函數 } } let c = new Child('週六'); c.run(); // 週六在運動
父類的方法和子類的方法一致,子類會執行子類本身的方法函數
// 父類 class Person { name:string; // 屬性,前面省略了 public 關鍵詞 constructor (name:string) { // 構造函數,實例化類的時候觸發的方法 this.name = name; } run ():void { console.log(`${this.name}在運動`); } } let p = new Person('李四'); p.run(); // 李四在運動 // 子類繼承父類 class Child extends Person { constructor (name:string) { super(name); // 初始化父類的構造函數 } run ():void { console.log(`${this.name}在運動--子類`); } work ():void { console.log(`${this.name}工做--子類`); } } let c = new Child('週六'); c.run(); // 週六在運動--子類 c.work(); // 週六在工做--子類
Typescript 裏面定義屬性的時候給咱們提供了三種修飾符:學習
private:私有,在當前類裏面能夠訪問,子類、類外部都無法訪問
屬性若是不加修飾符,默認就是公有(public)this
class Person { public name:string; // 公有 constructor (name:string) { this.name = name; } run ():void { console.log(`${this.name}在運動`); // 在類裏能訪問 } } let p = new Person('李四'); p.run(); console.log(p.name); // 在類外面能訪問 class Child extends Person { constructor (name:string) { super(name); } run ():void { console.log(`${this.name}在運動--子類`); // 子類能訪問 } } let c = new Child('週六'); c.run(); // 週六在運動--子類 console.log(c.name); // 在類外面能訪問
class Person { protected name:string; // 保護 constructor (name:string) { this.name = name; } run ():void { console.log(`${this.name}在運動`); // 在類裏能訪問 } } let p = new Person('李四'); p.run(); // console.log(p.name); // 報錯,在類外面不能訪問 class Child extends Person { constructor (name:string) { super(name); } run ():void { console.log(`${this.name}在運動--子類`); // 子類能訪問 } } let c = new Child('週六'); c.run(); // 週六在運動--子類 // console.log(c.name); // 報錯,在類外面能訪問
class Person { private name:string; // 私有 constructor (name:string) { this.name = name; } run ():void { console.log(`${this.name}在運動`); // 在類裏能訪問 } } let p = new Person('李四'); p.run(); // console.log(p.name); // 報錯,在類外面不能訪問 class Child extends Person { constructor (name:string) { super(name); } run ():void { // console.log(`${this.name}在運動--子類`); // 報錯,子類能訪問 } } let c = new Child('週六'); c.run(); // 週六在運動--子類 // console.log(c.name); // 報錯,在類外面能訪問
function Person (name) { this.name = name; } Person.age = 24; // 靜態屬性 Person.run = function () { // 靜態方法 console.log(Person.age); } Person.run(); // 靜態方法的調用
$('#box').css('color', 'red'); // 實例方法 $.get('url', function () { // 靜態方法 }) $(element) { // 實例 return new Base(element); } $.get = function (url, callback) { // 靜態方法 } function Base (element) { this.element = element; this.css = function (attr, value) { this.element.style[attr] = value; } }
class Person { public name:string; // 公有 public age:number = 25; static sex:string = 'man'; // 靜態屬性 constructor (name:string) { this.name = name; } public run ():void { // 公有方法 console.log(`${this.name}在運動`); // 在類裏能訪問 } // 靜態方法 static print ():void { console.log(`靜態方法,性別:${Person.sex}`); } } // 靜態屬性和方法的調用 console.log(Person.sex); Person.print(); // 靜態方法,性別:man
多態:父類定義一個方法不去實現,讓繼承它的子類去實現,每個子類有不一樣的表現。url
多態屬於繼承。code
class Animal { name:string; constructor (name:string) { this.name = name; } eat () { // 具體吃什麼,不知道。具體吃什麼,由繼承它的子類去實現,每個子類的表現不同 console.log('吃的方法'); } } class Dog extends Animal { constructor (name:string) { super(name); } eat () { // 子類實現父類的 eat 方法 console.log(`${this.name}喜歡吃骨頭`); } } class Cat extends Animal { constructor (name:string) { super(name); } eat () { // 子類實現父類的 eat 方法 console.log(`${this.name}喜歡吃老鼠`); } }
abstract
關鍵字定義抽象類和抽象方法,抽象類中的抽象方法不包含具體實現而且必須在派生類(子類)中實現。// 抽象類,標準 abstract class Animal { name:string; constructor (name:string) { this.name = name; } abstract eat ():any; // 抽象方法不包含具體實現而且必須在派生類中實現。 } // let animal = new Animal(); // 錯誤,抽獎類不能被實例化 class Dog extends Animal { constructor (name:string) { super(name); } eat () { // 抽象類的子類必須實現抽象類裏面的抽象方法 console.log(`${this.name}喜歡吃骨頭`); } } let dog = new Dog('小黑'); dog.eat();