00:00
好了,刚才的话对我们这个类做了一个简单的介绍,接下来呢,我们来看我们下一个东西,还是我们在这儿呢,创建一个新的文件,来一个这个新的TS文件,零二我们叫做一个构造函数,或者呢,我们可以叫它是构造方法啊,或者有有人叫做一个构造器。什么叫构造函数呢?那我们还是先不管它,我们先来照我们之前讲那个东西,我们来定一个类还是一个person类啊,直接来一个这个class,一个person啊,Class一个person person完事以后呢,在这来一个大括号,我们说了在它里边我们可以定义这个属性啊,这跟那玩意儿重名了啊,我们到一个dog吧啊dog虽然这其实重名的话,这其实关系不大啊,为了避免冲突,我们还是换一个啊glass dog在这儿呢,我们来一个name啊,Name的话我只给他写一个啊,这个叫做一个旺财啊,然后呢,给他来一个分号,来一个这个age age来一个三岁啊旺财,然后呢,我们可以加一个方法啊,加一个方法,比如说狗呢,就叫呗,是吧,狗就会叫唤,我们这直接alert,一个alert一个旺旺旺旺旺简单写一下,那现在的话,我们就创建好了这么一个狗这个类,那我要用这个狗这个类的话,我可以直接来一个cost,来一个这个dog,等于个new一个。
01:21
道我们就在通过这个类来创建一个实例对象啊,创建一个实例对象,那这个时候创造完了,我们引入一下啊,引入一下看效果来一个这个0202的话,那就是叫做一个我们这个构造函数点,一个这个GS引入一下,引入完了在这儿啊,我们来看一下我们这个new dog new dog的话,我们还是把这个dog呢去打印一下,打印完了在这儿我们去刷新。诶,那你看啊,Dog内幕是旺财age是13这么一个效果,它有什么问题,那就是我们在创建一个这个对象的时候,哎,我们这个对象一般啊,一般我们一个类不可能只建一个对象,我这一个类要创建只创建一个对象,那这个类的话就有点意义不大了,所以我们通常情况下,我们是一个类里面我们可能要创建多个对象,那你要创建多个对象的话,那现在我们这儿只有一个对吧,那创建多了怎么创建一样的到个二,诶到个三。
02:22
然后呢,我们来一个DO4创建四个对象对吧,现在创建了四个狗来234,那这个时候我们创建了四个对象,这四个对象创建起来,它会有什么问题呢?来我们在这刷新一下,走一个,哎,它这编译呢,还有点慢啊,来刷新一下,哎呀。还没过来是吧,嗯,刷新一下,OK,现在我这是不是又创建了四个对象,哎,四个对象,但是这四个对象你发现了它都是什么。是不是我得到了四个旺财啊,四个旺财,那这个时候实际上这样的话,我们这个类实际上创建的时候,它就会有有问题什么问题,就是我们希望这个类是用来创建狗的,哎,它可以用来创建不同的狗是吧,这是创建个旺财啊,那是创建个哎大黄,哎,那创建个这个这个小黑对吧,我可以创建不同的狗,但是现在的效果是OK,我的确创建了四个对象,但是四个对象里他们的属性。
03:25
是不是都是一模一样的呀?诶一模一样的,这就出现了一个什么问题,那就是意义不大了,因为这就变成了一个创建旺财的类,而不是一个创建狗的类,我们希望的是什么效果,我们希望的是我每一次调用这个dog,它所创建的对象是不同的,而不是像这种每次都创建相同的对象,那这时候要怎么办?哎,那相同的话,首先一般你这种对象里边的方法肯定是一样的,所以方法我们不用动,但是呢,我们说了每一条狗的名字是不是一样的,诶不一样,每一条狗的年龄是不是一样的,哎,也应该是不一样,所以这个时候我们在类里面用不用说我直接把属性的值给它设置好,哎,是不是通常我们不需要这么做呀?哎,所以这个时候我们最好的体验什么呢?最佳的实践是什么呢?就是我们这个类里边的,我们不在类里边去给这个实力属性,直接去指定值啊,我直。
04:25
先来一个name string,我干嘛呢?我只把它的类型给指定好了,值呢我不指定啊,指我不指定,但是如果我这么写的话,它其实呢也不行,因为你这么写你还不如刚才那么写呢,因为你这么写的话,等于说你这个变量是没有值,你这个什么属性值是不是都没有啊,Name也没有,是A也没有,都没有这个值,那怎么办?首先呢,两个问题,第一个问题,这个值我不能在类里面去指定,因为在类里边指定好了,就意味着所有的对象都是这个值,第二一个,哎,我还得干嘛呢,我还不能不给值,你要不给值就等于我这里边是不是就没有这个属性了,好,那问题就来了,那我什么时候给他们值,首先说这个值在类的时候,在定义这个类的时候,这个值是不能确定的啊,这个值是不能确定的,二一个那你又不能不给,什么时候给。
05:25
什么时候给,诶是不是我在创建这个对象的时候,我是不是再给啊?诶我想创建旺财,我就给name赋值旺财,我想创建小黑,我就给name赋职小黑,我想创建什么,我是不是就给这个name赋值什么呀?诶那我们怎么知道这个对象什么时候创建的?诶,那这里边啊,我先把它注掉,那这里边就要用到了,我们这么一个函数叫做恩斯tractor,直接在里边加就行了,这个函数的名字是固定的,就叫constructor constructor什么意思?Constructor被称为什么呢?被称为叫做构造函数,构造函数什么时候调用?构造函数会在我们这个对象创建时调用啥意思?我们在这儿是不是用了一个new dog呀?哎,记住了,当我调new dog的时候,实际上就相当于我掉了,看traor,我们来看一下,那老师按你这么说的话,那我new dog的时候,这个函数是不是就执行了,来,我们来打印一下,直接来一个cancel.log log,我们来写一个什么呢?哎,写一个这个构造函数执行了,执行了啊,这一保存看效果,一刷新,你看是不是构。
06:49
做函数执行了,而且啊,注意你每次调这个new道,你每次调这个new道,这个构造函数都会执行,所以你就可以这样理解,我调new dog实际上就等我在调用这个constructor啊,我在调用new dog的时候,就等于我在调用狗这个类里边的构造函数,诶,那它有啥用啊。
07:14
哎,也就是说当我调用构造函数以后,我的看似tra是不是就是立即就执行了,哎立即就执行了,那这里边注意了,在我们的函数里边,它有一个东西叫做什么呢?叫做Z,叫做Z啊在我们的任一个函数啊或者方法里边都有一个东西叫做Z,这个Z表示什么意思?哎,注意了啊,这个Z在我们这个哎类中,或者说在我们这个方法中啊,在我们这个诶实例的方法中,哎实例方法中,哎我们这个Z就表示什么呢?表示我们当前的实例,当前的实例啥意思?你看这儿啊,我这儿来了一个new dog,是不是等于一个dog呀,那这个时候它掉的是这个构造函数,那这种情况下,这个Z就表示我们这个dog,那如果我再来一个DO2等于new,到那这个时候,在我第18行代码这个构造函数里边,这个Z次就表示我DO2,我如我再写一个DO3,那这个Z。
08:14
这次就表示我的这个DOG3,换句话说,你这个对象是谁,这个Z它就是谁,所以这个时候这个Z就指的是我们这个,哎,不同的这个道对象就这么一个事儿啊,这叫一个ZZ就表示当前的实例,也就是说在构造函数里面。在构造函数中,当前对象就是我们当前新建的那个对象,哎,新建那个对象,也就是你创建的是哪个,这个Z它就是这个,那我可以干嘛呢?我们可以啊,在构造函数中,我们可以通过Z像什么呢?像我们新建的对象中来添加属性,怎么加?哎,我可以这样写,我直接来一个this.name等于一个孙悟空,哎,别孙悟空,这是这是狗对吧?哎,狗等于一个旺财。
09:10
然后呢,我来一个z.H等于一个什么呢?等于个18定义这两。那这里面注意,你看当我写完这个属性以后啊,这样我们往这个Z里加,实际的效果就是把我往我们这个新建的对象里加,所以以我们这个dog为例的话,以我们这个道为例,这个时候我们加的时候,你看这个旺财是不是就加进去了,哎,旺财跟18就加进去了,然后的话,但是我这么写的话,它其实也有问题,什么问题呢?如果我再整一个道杠,那这个时候你会发现我这个道杠还是什么呢?还是这个旺财,还有这个18,他们是一样的啊,一样的。所以我如果这么写的话,跟我刚才那么写其实没有本质的区别,是一样的,都是把我们这个旺财呀,还有18这些东西给它固定了,也就是我创建的每一个对象,它的值都是一样的,那怎么避免它们不一样呢?怎么能让它们是不一样的值呢?啊避免它们是重复的值呢?那这个里边我们就可以在这个构造函数当中,我们传参数,我直接来一个内类型是string,来一个edge,诶值呢是一个,诶number,那我这块赋值的时候,我就可以直接写一个z4.name等于namez4.a等于A,那也就是说这个时候我再给他们赋值的时候,我不是把值写死了,而是负的是那个参数啊,我把那个参数的值赋值给我们这些属性,那我们在调的时候,我这就不能这么调了,因为我这儿有两个参数,我们说了你new dog就等于调这个构造函数嘛,所以构造函数这需要两个参数,你。
10:51
你有道,这你就得传两个参数,那我这就来一个,我来一个吧,第一个叫小黑,小黑呢是四岁,哎第二个呢是小白,小白呢是两岁,哎,小白是两岁,那这样的效果就是我第一个创建的dog,那是小黑,第二个创建的dog,那就是一个小白,这样我们一刷新走一个,诶那这个时候你看我是不是就创建出了两个,诶内幕和A都不相同的一个对象啊,诶这样一来我们的这个。
11:23
这个dog类才变得真的有意义,也就是我每一个所创建的对象,它会根据我传的这个属性值的不同,它的值也不同,也就使得我们可以创建出不同类型的一个对象,就是这样一个效果,其实是非常简单的,但是你说老师这怎么有一个红色下划线呀,诶注意了,它其实它是给我们一个提示,提示什么呢?就是提示你这两个属性在我们这个类当中呢,你没有定义,没有定义所以就给你报错了,所以呢,我们只需要把这个name的话给它在这儿写上,哎,我有两个属性,一个叫name,一个叫A,然后你在这儿再去对它们赋值,就没有这个错误了,所以我们这个东西构造函数跟我们属性定义它的怎么是怎么分工的啊,首先的话,我们这个属性是在我们这个类当中直接去定义的啊,写几个就有几个,这是一个二一个,我们在赋值的时候是在我们的构造函数里。
12:23
给它赋值的啊,根据你的这个哎,参数也好,或者你有些值可能就是固定的,你给它传进来就OK了,所以这里边一定注意啊,所以啊,构造函数是一个非常非常重要的一个东西啊,我们在这个定义类的时候,一定会有构造函数,一定是把我们这个属性在构造函数当中进行赋值的啊,进行赋值的好,那再回过过头来说这个ZZ次我们再强调一下,Z就是表示我们当前对象,当前对象啥意思?以我们这个B这个这个方法为例啊,B这个方法为例,在这儿的话,我们直接来一个Z,我们打印一下这个Z,那注意啊,打印一下。
13:05
打印一下这个Z,那这个时候注意这个Z到底是谁,哎,简单来说谁调的这个方法Z就是谁,Z就表示的是当前对象嘛,所以我如果是dog点一个bug dog.bug这个方法是通过dog这个对象去调的,那这个时候这个Z就是dog,也就是小黑啊,也就是小黑,这一刷新就是小黑啊,如果我是到个2.bug掉的啊,那这个时候方法是到个二去掉的,那这个Z就是道个二,谁掉的这个Z就是谁,那我这儿可以干嘛呢?我可以通过这个Z啊在方法中。哎,我们可以通过这个Z来表示什么呢?哎,当前调用方法的对象。所以有的时候我们是想干嘛呢?诶,比如说我就想打印一下当前对象的某个属性,比如说我就想打印当前对象的name属性,那我就可以Z点内,那么它的效果就是什么呢?诶如果你是用DO2点的bug啊,DO2掉的,那这个时候Z点内呢就是小,如果你是用dog点的一个B,那这个时候这个z.name呢就是小黑,你点谁谁点的这个Z就是谁,所以记住了啊,在我们这个TS里,其实我们这个Z你就理解到这儿就了可以了,GS里边Z相对来说比较复杂,但是在TS里我们就主要就积极点就行了,一定注意这次就表示的是当前的对象,对于构造函数来说,在构造函数当中,这次就是你当前创建的那个对象,就是这个Z,谁你当年创建了谁,这个Z就是谁,所以在构造函数当中,我们可以通过Z向对象当中去添加属性。
14:55
然后在我们这个普通的方法当中,这个Z次是谁呢?Z次就是我们调用方法的对象,谁调用的,诶这个Z次就是谁啊,大家注意我们说的前提,所有的前提都是这些都是实例方法,你别整个静态方法,你说老师当这次是不是当前对样,不是因为静态方法那是类方法啊,那那就是另另当别论啊,另当别论了,但是我们不记那些没用的东西,我们就记那些关键的点,就记住一一句核心的这次就表示当前对象啊,Z就表示当前对象啊,好,这个是我们说的一个概念,叫做构造函数,还有这个Z这个东西的话,它它不难,它不难,但是稍微有那么一点点,有那么一点点绕,所以你再去用的时候,一定要把这东西自己去写一下,好好的去体会一下啊,好,我们来停一下。
我来说两句