Typescript中private、public、protected修飾符的區別


首先我們需要了解什么是類,class。

什么是面向對象編程?

即Object Oriented Programming,OOP。主要思想是把構成問題的各個事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘一個事物在整個解決問題的步驟中的行為。面向對象程序設計中的概念主要包括:對象、、數據抽象、繼承、動態綁定、數據封裝、多態性、消息傳遞。

面向過程是具體化的,流程化的,解決一個問題,你需要一步一步的分析,一步一步的實現。

面向對象是模型化的,你只需抽象出一個類,這是一個封閉的盒子,在這里你擁有數據也擁有解決問題的方法。需要什么功能直接使用就可以了,不必去一步一步的實現,至於這個功能是如何實現的,管我們什么事?我們會用就可以了。

面向對象的底層其實還是面向過程,把面向過程抽象成類,然后封裝,方便我們我們使用的就是面向對象了。

類Class

以下是一個常見的類的寫法。

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");

我們聲明一個Greeter類。這個類有3個成員:一個叫做greeting的屬性,一個構造函數和一個greet方法。

公共public,私有private與受保護protected的修飾符

一般來說,在TypeScript里,成員都默認為public

我們可以把上面的例子寫成這樣:

class Greeter {
    public greeting: string;
    public constructor(message: string) {
        this.greeting = message;
    }
    public greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");

當成員被標記成private時,它就不能在聲明它的類的外部訪問。

class Greeter {
    private greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
}
new Greeter('abc').greeting; // 錯誤:'greeting'是私有的。

protected修飾符與private修飾符的行為很相似,但有一點不同,protected成員在派生類中仍然可以訪問。 例如:

class Person {
    protected name: string;
    constructor(name: string) { this.name = name; }
}

class Employee extends Person {
    private department: string;

    constructor(name: string, department: string) {
        super(name)
        this.department = department;
    }

    public getElevatorPitch() {
        return `Hello, my name is ${this.name} and I work in ${this.department}.`;
    }
}

let howard = new Employee("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // 錯誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM