typescript关于类的一些总结

1.什么是类?

我们从小到大都听到很多关于类的词语,比如植物类、动物类、微生物类、显而易见我们知道它们是有区别,且它们内部又有共同的一些基础特征,比如说:
猫类:皮毛颜色、猫叫;那你可能会想到对象,比如定义一只加菲猫:皮毛颜色:棕色
那么你会说那加菲猫也有这样的属性,那她是类吗?

2.区分类和对象

类是抽象的,它描述了一些属性和方法,比如猫类
对象是具体的,你也可以理解为它引申于类,比如加菲猫

3.如何创建类?

在es5中,其实我们是没有类的概念的,我们使用构造函数、原型链继承
es6中使用class

3.1构造函数方式
function Obj(){
    this.name="vicky";
    this.say=function(){
        alert("我是vicky");
    };
}
var obj1=new Obj();
console.log(obj1.name)
3.2原型链
function Obj(){
}
Obj.prototype.name="vickyfan";
Obj.prototype.say=function(){
    alert("vickyfan");
}
var obj1=new Obj();
console.log(obj1.name)
3.3.....其实还有工厂模式、原型加构造函数等,这里就不一一说明了
3.4class
class Cat  {
    name: string;
    fur: string;
    //需要构造函数初始化
    constructor(name: string, fur: string) {
        this.name = name;
        this.fur = fur;
    }
    miao () {
        //this访问的是类的成员
        console.log('我叫'+this.name+',我的毛发颜色是'+this.fur+',喵喵喵~')
    }
}
let myCat = new Cat('mini','yellow')
myCat.miao()

4.继承

什么是继承?从字面理解就是可以能获取一部分的东西,好比如说继承财产,但是这个东西我们在类中指的是属性和方法;
子类(派生类):继承人
基类(超类):被继承人
MINI 继承了车类的move函数,实例minicooper这个对象,注意派生类MINI在使用constructor函数时,要使用super,
他会执行基类的构造函数,在使用this之前,必须调用super()
而且在派生类中我们重写了move函数,这使得当我们定义了更多的派生类是,可根据需求重写该方法

class Car {
    move (distance: number) {
        console.log('行驶了'+distance+'公里')
    }
}
class MINI extends Car {
    speed: number;
    constructor(speed: number) {
        //注意:派生类使用constructor时,要使用super
        super()
        this.speed = speed
    }
    move (distance: number) {
        console.log('速度为'+distance+'公里每小时')
    }
}
let minicooper = new MINI(300)
minicooper.move(3000)

5.公共public,私有private与受保护protected的修饰符,默认都是public

总结5.1:public不受限,private只能在该类中使用
class Cat {
    private name: string
    constructor(name: string) {
        this.name = name
    }
    bark () {
        console.log(this.name)
    }
}
let miao = new Cat('miao')
miao.bark()
console.log(miao.name)//属性“name”为私有属性,只能在类“Cat"中访问
5.2总结:protected与private很像,但是还是有区别,它可以在派生类访问,
class Cat {
    protected name: string
    constructor(name: string) {
        this.name = name
    }
    bark () {
        console.log(this.name)
    }
}
class MI extends Cat {
    constructor(name: string) {
        super(name);
    }
    move () {
        console.log('我在跑步')
    }
}
let miao = new Cat('miao')
let miao1 = new MI('hahha')
miao.bark()

6.readonly只读属性:必须在声明时或构造函数里被初始化

class Cat {
    readonly name: string
    constructor(name: string) {
        this.name = name
    }
    bark () {
        console.log(this.name)
    }
}
let miao = new Cat('叮当')
console.log(miao.name)//叮当
miao.name = '杰瑞'//无法分配到“name”,因为她是常数或只读属性

你可能感兴趣的:(typescript关于类的一些总结)