TypeScript前端学习(四)

前言

还是分享的笔记,大佬请绕行!


一、类的定义和继承



typescript 复制代码
console.log("----对象---");
var people = {
    "name": "张三",
    syaHi() {
        console.log("HI,my name is " + this.name);
    }
}
people.syaHi();

console.log("----类---");
class People {
    name: string;

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

    syaHi() {
        console.log("HI,my name is " + this.name);
    }
}

//实例化类
var people2 = new People("李四");
people2.syaHi();

console.log("----类的继承---");
//类的继承
class Student extends People {
    constructor(name: string) {
        super(name);
    }

    syaHi() {
        console.log("HI,my name is " + this.name);
    }

    makeWorks() {
        console.log("我在做作业");
    }
}

var student = new Student("小明");
student.syaHi() + "," + student.makeWorks();

class Teacher extends People {
    subject: string;

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

    syaHi() {
        super.syaHi();
        console.log("同学们好");
    }

    teach() {
        console.log(this.name + ",我在教" + this.subject);
    }
}

var teacher = new Teacher("李老师", "数学");
teacher.syaHi();
console.log("----------")
teacher.teach();

示例效果

二、类的访问权限




typescript 复制代码
console.log("----类的访问权限---");
class Animal {
    //private className:string="Animal";  //私有属性,只能在类内部访问(继承他的类用就会报错了)
    className: string = "Animal";

    protected constructor() {
        this.className = "Animal";    //受保护的构造函数,只能在类内部访问(继承他的类用就会报错了)
    }
}
//var animal = new Animal();  //TS2674: Constructor of class Animal is protected and only accessible within the class declaration.

class Dog extends Animal {
    name: string;

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

    run() {
        console.log(this.name + "在跑");
    }
}
var dog = new Dog("小狗");
dog.run();

示例运行效果

注释的语句,报错描述写在注释里了

报错就是因为设置了protected等关键字

三、只读属性与存取器



typescript 复制代码
console.log("----只读属性---")

//
class Circle {
    readonly PI: number = 3.14;
    readonly r: number;

    constructor(r: number) {
        this.r = r;
    }

    getArea() {
        return this.PI * this.r * this.r;
    }
}
var circle = new Circle(10);
console.log(circle.getArea());

//circle.r = 20; //TS2540: Cannot assign to 'r' because it is a read-only property.

console.log("----存取器---");
class Circle2 {
    readonly PI: number = 3.14;
    protected r: number = 0;
    set R(r: number) {
        if (r < 0) {
            return;
        }
        this.r = r;
    }
    get R(): number {
        return this.r;
    }
    getArea() {
        return this.PI * this.r * this.r;
    }
}
var circle2 = new Circle2();
circle2.R = 10;
console.log(circle2.R);
console.log(circle2.getArea());

示例运行效果


总结

  • 看起来跟其他面向对象的后端语言真像
  • 这次没有用tsc命令生成js对比,有兴趣的可以自己生成对比看看
    纯粹的笔记备忘,uping!
相关推荐
_AaronWong44 分钟前
Electron 实现仿豆包划词取词功能:从 AI 生成到落地踩坑记
前端·javascript·vue.js
cxxcode1 小时前
I/O 多路复用:从浏览器到 Linux 内核
前端
用户5433081441941 小时前
AI 时代,前端逆向的门槛已经低到离谱 — 以 Upwork 为例
前端
JarvanMo1 小时前
Flutter 版本的 material_ui 已经上架 pub.dev 啦!快来抢先体验吧。
前端
恋猫de小郭1 小时前
AI 可以让 WIFI 实现监控室内人体位置和姿态,无需摄像头?
前端·人工智能·ai编程
哀木1 小时前
给自己整一个 claude code,解锁编程新姿势
前端
程序员鱼皮2 小时前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github
UrbanJazzerati2 小时前
Vue3 父子组件通信完全指南
前端·面试
是一碗螺丝粉2 小时前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain
wuhen_n2 小时前
双端 Diff 算法详解
前端·javascript·vue.js