zoukankan      html  css  js  c++  java
  • TypeScript 面向对象编程

    面向对象编程-类的声明和使用

    类的出现可以让前端程序员抽象层次、增加维护性和复用性。当然这一系列的类的操作,我们都叫他面向对象编程。TypeScript就是一个基于类的面向对象编程语言。

    类是对象具体事务的一个抽象,对象是类的具体表现。

    // 类规范,首写字母大写 - 大驼峰命名
    class XiaoJieJie{
    // 区别于对象,不需要使用逗号隔开
    name: string
    age: number
    // 构造函数
    // 构造函数的主要作用是给类中封装的属性进行赋值
    constructor(name:string, age:number){
    // 使用 this 赋值
    this.name = name
    this.age = age
    }
    say(){
    console.log('NIHAOA!')
    }
    }
    // 有类之后声明对象
    let jiejie:XiaoJieJie = new XiaoJieJie('fanbingbing',18)
    // 打印出生成的对象看下样子
    console.log(jiejie)
    // 调用类方法
    jiejie.say()  

    使用和定义类其实很简单,关键是理解类的思想。要有抽象逻辑的能力,这样才能复用和增强维护性。

    面向对象编程-修饰符

    访问修饰符

    • public:公有修饰符,可以在类内或者类外使用public修饰的属性或者行为,默认修饰符。
    • protected:受保护的修饰符,可以本类和子类中使用protected修饰的属性和行为。
    • private : 私有修饰符,只可以在类内使用private修饰的属性和行为。
    class XiaoJieJie{
        public sex:string
        protected name:string
        private age:number
        public constructor(sex:string, name:string, age:number){
            this.sex = sex
            this.name = name
            this.age = age
        }
        public sayHello(){
            console.log('HELLO')
        }
        protected sayLove(){
            console.log('ILOVEYOU')
        }
    }
    
    var jiejie:XiaoJieJie = new XiaoJieJie('nv', 'DLLB', 16)
    
    // 打印出对象属性看效果
    console.log(jiejie.sex)
    // 报错:属性“name”受保护,只能在类“XiaoJieJie”及其子类中访问
    console.log(jiejie.name)
    // 报错:属性“age”为私有属性,只能在类“XiaoJieJie”中访问
    console.log(jiejie.age)
    // 调用方法
    jiejie.sayHello()
    // 报错:属性“age”为私有属性,只能在类“XiaoJieJie”中访问
    jiejie.sayLove()

    只读属性修饰符

    使用readonly修饰符将属性设置为只读,只读属性必须在生命时或者构造函数里被初始化(注意)。

    class Man{
        public readonly sex:string = 'nan'
    }
    
    var man:Man = new Man()
    // 报错:无法分配到“sex”,因为它是常数或只读属性
    man.sex = 'nv'

    面向对象编程-继承和重写

    类的继承

    继承:允许我们创建一个类(子类),从已有的类(父类)上继承所有的属性和方法,子类可以新建父类中没有的属性和方法。

    // 父类
    class Nloong{
        public name:string
        public age:number
        public skill:string
        constructor(name:string, age:number, skill:string){
            this.name = name
            this.age = age
            this.skill = skill
        }
        public interest(){
            console.log('zhaonimei')
        }
    }
    
    let loongObj:Nloong = new Nloong('baiye', 18, 'coding')
    // 测试父类方法
    loongObj.interest()
    
    // 子类继承父类属性和方法 extends
    // 但是有一点需要我们注意,TypeScript不支持多重继承。
    class Xloong extends Nloong{
        // 子类扩展自身的属性和方法
        public xingxiang:string = 'shuaiqi'
        public zhuangQian(){
            console.log('yitianyigeyi')
        }
    }
    
    let shuai = new Xloong('shuai', 5, 'daren')
    
    // 子类能使用父类的方法,通过继承而来
    shuai.interest()
    // 子类能使用父类找中没有自身扩展的方法
    shuai.zhuangQian()
    

    类方法的重写

    // 父类
    class Nloong{
        public name:string
        public age:number
        public skill:string
        constructor(name:string, age:number, skill:string){
            this.name = name
            this.age = age
            this.skill = skill
        }
        public interest(){
            console.log('zhaonimei')
        }
    }
    
    let loongObj:Nloong = new Nloong('baiye', 18, 'coding')
    
    loongObj.interest()
    
    // 子类
    class Xloong extends Nloong{
        public xingxiang:string = 'shuaiqi'
    
        // 重写
        public interest(){
            // super 在子类中调用父类的方法,实现重写时保存父类的方法
            super.interest()
            console.log('chuangjianGS')
        }
        
        public zhuangQian(){
            console.log('yitianyigeyi')
        }
    }
    
    let shuai = new Xloong('shuai', 5, 'daren')
    
    shuai.interest()
    
    shuai.zhuangQian()
    

    面向对象编程-接口

    认识接口

    // 接口
    interface Husband{
        sex:string
        interset:string
        // 接口可选参数添加问号
        maiBaoBao?:Boolean
    }
    
    let myhusband:Husband = {sex: 'nan', interset: 'kanshu'}
    
    console.log(myhusband)
    

    面向对象编程-命名空间

    命名空间的使用

    Dehua 是同名类,可以使用不同的命名空间区分使用

    // 命名空间
    namespace shuaiGe{
        // export 暴露出去
        export class Dehua{
            public name:string = 'liudehua'
            talk(){
                console.log('woshishuaigeliudehua')
            }
        }
    }
    
    namespace bdjie{
        export class Dehua{
            public name:string = 'madehua'
            talk(){
                console.log('woshiershixiongmadehua')
            }
        }
    }
    
    let dehua1:shuaiGe.Dehua = new shuaiGe.Dehua()
    let dehua2:bdjie.Dehua = new bdjie.Dehua()
    
    dehua1.talk()
    dehua2.talk()
    

    原文地址:http://jspang.com/post/typescript.html?tdsourcetag=s_pcqq_aiomsg

  • 相关阅读:
    C#中的Byte,String,Int,Hex之间的转换函数。
    js继承之原型继承
    node.js module初步理解
    手游热更新方案--Unity3D下的CsToLua技术
    像素迷踪,当Unity的Frame Debugger力不从心时
    Unity内存理解(转)
    Unity5的AssetBundle(二、加载&卸载)
    Sprite Atlas与Sprite Mask详解
    Unity2017新功能Sprite Atlas详解
    Util应用程序框架公共操作类(一):数据类型转换公共操作类(介绍篇)
  • 原文地址:https://www.cnblogs.com/DoubleLoong/p/9754506.html
Copyright © 2011-2022 走看看