当前位置: 代码迷 >> 综合 >> TS的面向对象
  详细解决方案

TS的面向对象

热度:82   发布时间:2023-09-18 23:20:08.0

1-1  对象 object (key to type)
const person ={
    firstName :'a',
    lastName :'b',
    age:18
}

object 与any的区别
    ①object定义更为精确
    ②object相当于any的子集

1-2 interface 
高内聚、低耦合:功能相关的事物放在同一个集合中形成一个模块,模块是互相独立的,不同的模块之间应该保持低耦合的状态

let drawPoint = (point) =>{
    console.log(point.x,point.y)
}
drawPoint({x:105,y:23});

interface Point {
    x:number;
    y:number;
}

1-3 class

interface IPoint {
    x:number;
    y:number;
    drawPoint:() => void;
    getDistances:(p:IPoint) => number;
}

class Point implements IPoint{
    //x:number;
    //y:number;
    
    constructor(pulic x:number,pulic y:number){
        this.x = x;
        this.y = y;
    }
    
    drawPoint = () =>{
       console.log("x:",this.x,"y:",this.y)
    }
    getDistances =(p:IPoint) =>{
        return Math.pow(p.x - this.x,2) + Math.pow(p.y - this.y,2)
    }
}

const point = new Point(2,3)  //对象(object),实例instance

point.drawPoint()
注意
    ①js的构造函数不可以重载(overlord),ts可以
    ②通过使用访问修饰符 pulic、private、protected顺便完成成员变量的声明和初始化,不可以使用参数缺省(?)的方法

1-4 访问修饰符

Public:所有定义成public的属性和方法都可以在任何地方进行访问,默认就是public。

Private:所有定义成private的属性和方法都只能在类定义内部进行访问,使用set给它赋值,使用get取值。

Protected:多有定义成protected的属性和方法可以从类定义内部访问,也可以从子类中访问。


1-5 module

1-6 泛型(可以用任何一个数字代替,约定俗成是T)

let lastInArray = <T>(arr:Array<T>) =>{
    return arr[arr.length - 1];
}
const l1 = lastInArray(["A","b"])

多泛型
let makeTuple = <T,Y>(x:T,y:Y) => [x,y]
const v1 = makeTuple(1,"noe")