• 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); // 错误
    
  • 相关阅读:
    C#,asp.net,命名空间名,类名,方法名的获得
    asp.net引用用户控件
    SQL数据是否存在(是否有数据)判断,表,存储过程是否存在
    asp:Button 事件,点击事件 html Button runat="sever"
    CSS图片最大大小限制
    asp.net 路径
    Js实现网站的重定向,Js转向网址,Js跳转
    ViewState 页面状态保留
    vs 附加到进程
    sql XML处理,sp_xml_preparedocument,openxml
  • 原文地址:https://www.cnblogs.com/unclefang/p/12091700.html
Copyright © 2020-2023  润新知