Apihhh 2022-08-16 10:59 采纳率: 100%
浏览 249
已结题

TS 的 class 中一定 要用 constructor 方法吗?跟直接赋值的区别在哪儿?

学习TS时对类的概念不太理解,想知道创建对象时直接赋值与在constructor 方法中赋值的区别在哪里,求解答

class Test1 {
    num1: number
    num2: number
}
let test1 = new Test1()
test1.num1 = 1212
test1.num2 = 3344
console.log(test1);  //运行结果:Test1 {num1: 1212, num2: 3344} 

class Test2 {
    num1: number
    num2: number
    constructor(num1: number, num2: number){
        this.num1 = num1
        this.num2 = num2
    }
}
let test2 = new Test2(1212,4455)
// test2.num1 = 1212
// test2.num2 = 3344  //运行结果:Test2 {num1: 1212, num2: 3344} 
console.log(test2); //运行结果:Test2 {num1: 1212, num2: 4455} 
  • 写回答

4条回答 默认 最新

  • sannianerban12138 2022-08-16 11:56
    关注

    constructor中文解释是构造器,它是类不可或缺的一部分,你在定义类的时候可以不定义构造器,但是类在编译的时候也会自动生成一个构造器,
    并且当你new 当前类的时候,构造器会自动运行

    对于类里面定义的变量赋值,不一定非要在构造器当中完成,直接赋值也是可以的,在实际使用当中没什么差距,但是如果你在构造器当中定义了参数,那么就代表这个参数是生成这个类的实例的时候必要的参数,
    如果是在实例创建完成后再赋值,最终效果虽然也是一样的,但是就没有些在构造器当中那么强制性了

    举例,如果你是负责完成某个工具类,你需要某一个参数是必填的,不填就会报错,那你就可以在你的类的构造函数里面声明这个变量呀,这样别人在调用你这个类的时候就知道,这个变量是需要传进来的,不然就不能调用这个类
    如果都是你一个人用这个类,你知道这个属性需要初始化,但是你可以不在构造器里面声明,而是生成实例以后再赋值初始化,也是可以的,但是如果你忘记初始化了,那可能就会出错

    构造器的意义就在于声明这个类里面哪些属性是需要一开始就初始化的,即想要构造这个类,你需要给我哪些参数我才能将类的实例给你构造出来

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月25日
  • 已采纳回答 8月17日
  • 创建了问题 8月16日

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败