00:00
我们这一块刚才讲的是一个采用工厂方法来创建对象,这种方法呢,比我们那种对箱自麻烂的方式干嘛呀,简单一些,简单一些,简单是简单了,但是他有没有什么,有没有什么问题呢?有没有什问题呢?现在我们来说了,诶我这有一个可person,有的时候我还需要一个什么呀,假设还有一个什么呢?我不光需要人的对象,我可能需要什么呢?C可瑞一个dog,我可能创建一个什么呀,狗的对象,狗的对象狗也有什么呀,有这个品种,Name品种他就不管了,是吧,Name来一个这个age啊age为什么不管呢?因为品种这词我不会拼啊,不会拼啊,那狗这个对象呢,我们来创建一个函数,这个函数呢用来哎创建我们这个狗的这个对象,直接我这来一个还是这个流程哇,一个OB接等于一个new,一个object创建一个新的对象,然后呢,OB接点name等于name OB接点age等。
01:00
点age,然后呢,加一个方法OB接点它就不能c name了,是吧?它来一个C哈,等于一个这个function function来什么呢?它这就简单了,直接来一个这个alert,一个这个诶旺旺诶写这么一个东西啊,或者写个袜袜是不是就行啊好,那这个东西我们就创完,创建完了,但是最后不要忘了re tu啊,你要将你创建对象是不是返回啊,哎返回啊好,那现在这个狗的对象我们已经有了,那我们来看看,来创建一个啊白骨精呢一边去啊来我们这儿创建一个这个狗的这个对象,直接来一个挖一个这个dog,等于什么呢?C create一个dog,你需要传一个name name来一个这个旺财,然后呢,年龄来一个三岁,诶那这是不是就创建一个狗的对象了,诶来我干嘛呢?来dog,点一个c hello已保存是不是就行了呀,诶以后你要想创建狗的对象就用什么呀。
02:00
就用create瑞dog就行了啊,瑞dog行了,好,但是我们看有没有什么问题啊,来还是干嘛呢,我要把这个对象在控制台里输出一下cancel.log一个dog,然后再输出一谁呢,我这个obj obj4啊OBJ4,然后我这一保存这儿不用看了,这你一看是不是全都是object呀,诶来看我们这个外部浏览器啊,我这一刷新走你,诶旺财age是三岁,蜘蛛精age是18岁,对吧?诶但是你会发现有一个什么问题呢,他们的类型。是不是全都是object呀,你看前边是不是都有一个大写的一个object呀,这表示什么呀?这表示我们这个对象是通过这个object这个构造函数去创建的吧,为什么object构造函数我们这里边调的是不是都是一个这个new object呀?哎,这是不是也是一个new object呀?诶new object都是一个object,就说什么呢?狗是object,人也是object,我们会发现什么呢?现在我有这么两个对象,你不看名,你刚能不能给我区分出哪个是人的对象,哪个是狗的对象?
03:14
是不是区分不了啊,因为他们是不是都是object呀,哎,无法区分这个类型啊,无法区分这个类型,所以这里边我们来说一下使用工厂孵化模式,诶工厂方法使用我们这个工厂方法创建的这个对象什么呢?使用的什么呢?使用的这个构造函数都是什么呀?都是object啊object所以什么呢?所以创建的这个对象啊,我们说叫类型啊,创建对象都是什么呢?都是我们这个object,诶它是一个数据类型吧,诶这个什么呀,类型的那就导致什么呢?就导致我们什么呢?我们无法干嘛呢?区分出什么呢?哎,多种不同类型的什么呀,对象什么意思呀,这狗跟人它是什么呀。
04:05
是一个东西我们干嘛了,我们是区分不开了,哎,区分不开就导致我们用的时候,那干嘛呢,就比较的麻烦啊,就比较麻烦,那现在那怎么办这个问题,所以这种方式呢,我们也只是了解一下,我们这块呢,用的不多啊,用的不多那怎么办呢?它有一个局限,都是一个object,那我希望什么呀,来一个14 14呢,我们还是接着说叫一什么呢?叫做一个构造函数,构造函数是干嘛的,那我们来看刚才我们这个对象,我创建狗的时候,实际上也是挖了一个obj等于一个new的一个object,创建人的时候是不是也是挖obj等于一个new的一个object呀,都是new object,也就是说它们的类型是。一样的吧,诶都是object,这来object第吧,都是,那我就希望什么呢?我希望我能区分一下它的类型,那我希望什么呀?我调人的时候是什么呢?创建人的候我是拗一个person,创建狗的时候用一个什么呀,Dog,诶那这样他们是不是用不同的构造函数创建的呀,这样我就可以干嘛了,区分出来了,但是问题来了,我这里边有person的构造函数吗?没有,诶压根就没有,所以你这一保存干嘛了,直接给你奥特person is not,所以这么写呢,不行,那这么写不行,因为什么不行,是不是因为它没有啊,那没有好办,咱们干嘛呀,咱们是不是给它造一个呀?哎,没有,咱们就造一个啊,所以这里边我们来干嘛呢?我们来创建一个什么呢?创建一个构造函数,专门干嘛呢,专门用来诶创建我们这个person对象啊P对象,那我们先说构造函数是什么。
05:50
啊,构造函数就是什么呀,一个普通的什么呀,函数创建方式和什么呢?普通函数没有区别,普通函数怎么创建的,直接来个方个人后边是不是跟这个函数名啊,构造函数也这么创建,但是它会有一些区别。
06:10
不同的是什么呢?我们这个构造函数习惯上干嘛呢,叫做首字母大写,诶你要创建个函数,我直接person是不是就行了呀,但是它是构造函数这个什么呀,P要大写,诶这就是一个习惯,也不是一个强制要求,但是尽量呢都按照这个要求去写首字母大写,然后来什么呢?来一个括号,来一个大括,除了名儿不一样,其实是不是它就是一个普通函数,哎,就是一个普通函数啊,但是呢,现在我们把它当成是一个什么呀,哎,构造函数来创建的啊构造函数来创建的好,那这个其实就是一个什么呀,构造函数了,诶那构造函数有了我能不能掉了呀,来一什么呢?来一个把一个这个什么呀,咱们就直接了,哎,Person等于个new,一个person,诶,那我们来说构造函数什么呢?构造函数和我们这个普通函数的这个什么呢,区别就是什么呢?就是。
07:11
我们这个构造函数什么就是我们这个调用方式的这个不同,普通函数什么呢?普通函数是什么呀?是直接直接调用,什么叫直接调用啊,没有这个new,直接来一个person,我是不是才叫普通函数啊,哎,这叫普通函数,而什么呢?而我们这个构造函数需要使用我们这个new关键字来要用,所以注意这么调就是一个普通函数,我加上一个new以后就是一个什么呀构造函数,诶我们先把它作为普通函数来调,咱们看看啊,我这来输出一谁呢?cancel.log一个这个person,那我们现在来看这个person等于谁?等于的是person这个函数的返回值吧,它有返回值吗?没有没有,它应该是谁安你find的吧,来我给你保存,是不是安你范的呀,那注意这是作为普通函数调用的情况来看着我给你。
08:11
加一个什么呀,妞,这回我看看他还是不是安迪范的啊,还是不是安妮范的,来我这一保存走你。是不是有对象了?哎,有对象了啊,这就有对象了,这就是什么呀?构造函数注意了,加谬是构造函数,不加谬是普通函数,只是调用方式的不同,诶,怎么就冒出了一个对象呢?我就冒出了一个对象啊,我有没有反应值啊,没有反应值,但是这确实是person,是不是确实有了一个对象了,这对象哪来的呢?那我们就要说一下我们这个构造函数的一个执行流程,构造函数执行流程,首先我们先说我们看到的,我看到的是什么?是不是有一个对象返回了,有一个对象作为返回值是不是返回了,哎,返回了,所以构造函数的第一步干嘛呢?诶,当你调用构造函数的时候,它会干嘛呢?会立刻创建一个什么呀,新的对象,只要你出现new了,我们说了一出现new是不是在我们这个什么呀?堆内存是不是开辟出一个新的空间区,创建一个对象了,所以一旦调构造函数,一定是立刻创建一个新的对象啊,立刻创建一个新的对象,然后再来说,接下来呢,诶,我们来说什么呢?第四步。
09:37
将我们这个新建的这个对象作为返回值返回,所以注意调构造函数这个步骤都是固定的,首先它要创建一个什么呀,新的对象,然后呢,将这个新的对象作为返回值干嘛呀。返回啊,所返回值返回中间是不是还落两步啊,哎,那我们来说一下啊,那首先说了啊,这我有没有指定返回值没有,但是它却返回一个对象,为什么?因为这就是我们构造函数一个特点啊,构造函数一个特点诶那我们想想中间我还差两步,那你猜猜这两步应该干嘛呀?诶你说我这函数它现在里边没东西是吧?假设我写一个alert一个ALERT1HELLO,你说我这函数它会不会执行?
10:21
好,这hello会不会出来呀,诶我这一保存是不是hello就出来了呀,Hello出来证明我这个函数的代码是不是确实执行了呀,那什么时候执行的呢?是在我们这个第三步,第三步叫什么呢?执行什么呢?执行我们这个函数中的什么呀,代码,或者你再说一点什么呀,一行叫做逐行,逐行逐支逐逐行执行我们这个函数中的代码,也就说是不是一行一行执行啊,只不过现在要没有,所以他看不出来,但是他会干嘛呀执行,那唯一一个特殊的就是谁呢?我们这个第二步,那第二步干嘛呢?第二步我们来说一下,第二步我们叫什么呢?叫做焦,我们这个新建的这个对象设置为什么呢?我们这个函数中的Z啊,设置为我们这个函数中的Z,换句话说,我这来一个。
11:22
Hurt一个this,那我们问你这个this他是谁?就是这个person啊,就是我新建的这个对象,你保存是不是就是object呀?哎,就是我新建的这个对象,所以在这构造函数里,我这个Z跟我新建这个对象干嘛呀?是一个东西,能理解吗?Z就是我们这个新建的这个对象,所以这里边我们说了this又出来一种情况,当函数以构造函数形式调用的时候,Z就是什么呀?新创建的这个对象,诶,然后干嘛呢?然后它是不是逐行执行这个函数中的这个代码啊,但是问题来了,咱们来说啊,流程回顾一下,一共四步,第一步创建一个新的对象,第二步将这个新的对象设置为函数中的什么呀?Z啊Z,所以这里边我们来说在什么呢?在我们这个构造函数中,可以使用我们这个Z来干嘛呢?来引用什么呀,新。
12:22
新建的这个对象了,哎,来引用新建对象,然后第三步叫直行执行函数中的这个代码,第四步将新建的对象作为返回值返回,那好了,那这流程我们大概知道了,但是现在问题来了,你这创建完对象是干嘛的呀?是空的吧,里边是不是什么也没有啊?那现在我想往对象里添加东西怎么办?诶怎么办?诶那你说我这来一个这个name,我要写个name等于一个hello,那这什么意思呀?这是往window里添加的,哎,往全局里添加的,而这个内幕想干嘛呀?我想添加到我那个新建的对象里边啊,新建的对象是谁呀?是不是Z呀?诶,Z所以干嘛呢?在构造函数中,我可以使用Z来引用新建的这个对象,所以我这来一什么呢?Z点内幕等于一个孙悟空,那表示什么呀?我向这个新建的对象里添加了一个内幕属性,Name幕使用的值是孙悟空,那所以如果这个Z次真是这个person的话,在person里边是不是应该有一个name属性啊?我们来看看有没有啊,我先刷新一下对象,有了直接来什么呢?Person点一个name来我这一保存,咱们来看走你。
13:37
是不是孙悟空啊,证明我这个名字是不是确实加入到我这个新的对象里啊,哎,来我这还是输出一下这个对象在我们控制台来看一下,一刷新咱们一看走你诶不是这个页面啊,CTRL运行是不是确实有孙悟空了,诶确实有孙悟空了,那你加一个行,我能不能再再加几个,来一个z.a等于一个18Z点一个这音D呀,真的等于个这个男是不是来一个性别呀,来一个this点一个C,诶name来一个什么呢?等于一个这个function function呢,我们这来一个来一什么呢?Alert一个这个this点内是不是这个效果呀?哎,那注意了,再强调一下这个Z水。
14:23
是谁?诶,就是我那个新建的对象啊,就是我那个什么呀,PR,诶就是这个返回值,这个Z最终会作为返回值赋值给谁呀?PRRPR,所以现在我整完了,我们来看这个PR,我这一保存,咱们来看一刷新是不是就有三个属性了,哎,三个属性了,那我说我能不能多创建几个呀?来一个呗,挖一个这个PERSON2 person2等于一个new,一个person是不是又创建一个呀?哎,挖一个这个PERSON3等于个new一个person是不是又创建一个呀?但是这又带来什么问题了,是不是又是一堆猴啊,来一个二,来一个三,一保存一刷新是不是都是孙悟空啊,为什么都是孙悟空啊?
15:06
哎,是不是又写死了呀,哎,那怎么办呀,是不是还是作为参数从外边传进来呀,所以改造一下来什么呢?来三个参数,Name逗号,Age逗号粘逗号,直接这就是z.name等于name z.edge等于edge this点沾是不是等于沾啊,一定要注意this是指的我们新建的那个对象,这样的效果就是我传什么是不是见什么了,来我来一什么呢?来一个孙悟空,然后逗号来一个这个18逗号粘字来一个男是不是三个东西啊,下边也同样,我这直接复制一下,这来个谁呢?来个这个,来个这个玉兔精,玉兔精来个这个16 16来一个这个女,这来来一个谁呢?来一个这个奔波棒,奔波霸呢,38来一个男啊一保存是不创。
16:06
个对象啊,咱们来看这一块一刷新走是不是三个对象啊,哎,三个对象就创建好了,诶但是可能同学看到这这感觉跟那个构造跟我们刚才那个工厂方法是不是是不是类似呀,但是注意它真的一样吗?诶看着啊看这你们注没注意看是什么,是不是person呀,诶person来咱们再整一个啊,我再整一个dog的构造函数,直接来一个方式来什么呢?Dog这里边呢,我什么也不写啊,什么也不写直接来什么呢?哇,一个这个dog等于什么呢?New dog那注意了,现在他们有没有区别了,我person对象是用new person创建的吧,Dog对象是用什么呀?用dog吧,我们来看他们的一个情况保存,我们就来一刷新走你person前面什么呀。
17:02
Person dog前面什么呀,Dog这回是不是就有有区别了,哎,有区别了啊,所以这里边我们再来说叫什么呢?使用同一个构造函数创建的这个对象我们什么呢?我们称为一类对象,比如说我的PERSON1 person2,还有PERSON3,这三个对象我们称为什么呀?都是同类对象,都是什么呀,都是person类的啊,都是person类的,我们说了只用同一个构造函数判断对象,我们称为什么呢?一类对象我们也什么呢?也将一个这个构造函数称为什么呢?称为一个类,所以这个person构函数我们也会有人称为什么呢?叫做person类啊person类,那我们什么呢,我们。将通过一个这个构造函数创建的这个对象称为什么呢?称为是叫做一个该类的实例,或者叫做该构造函数实例,比如说我这个person就叫什么呀,叫做person的实例啊,Person类的实力,PERSON2呢就叫person类的实力,PERSON3呢也叫person类的实例,但是dog呢,哎是dog类的实例啊,我们称它是它的实例啊,一定注意它们的一个关系啊,也是说现在这三个是一个类,这个自己是不是一个类啊,哎,是一个类,但是同学可能觉得这块虽然这不同了,这这只是看着不同对吧,那么说了,他们有没有什么本质上的不同啊。
18:40
诶,那我们这块有一个东西,我们来说一下,我们有一个什么呢?有一个叫做一个运算符,我们来看啊,有这么一个东西,直接cancel.log,我们来看,我想干嘛呢?我来一个person,来一什么呢?叫做一个instance of of谁呢?Of一个这个p instance什么意思呀。
19:00
实例吧,哎,实例我们来说一下这东西是干嘛的,使用我们这个in tens off可以什么呢?可以检查什么呢?检查一个对象是否是一个类的实例,再说一遍,什么叫类。就是构造函数吧,哎,构造函数就是类,什么是实例,通过这个构造函数创建的那个对象就是什么呀,实例,那现在呢,我来使用这个instance of来检查什么呢?一个对象是否是一个类的实例,来说一下它的语法怎么写的,就是对象in ten of我们的构造函数,那来看我这什么呀,Person这个对象instant of person这个构造函数什么意思啊?检查这个对象是否是这个构造函数的什么呀?实例,我们说了,如果是,则返回什么呀处,否则呢,返回false,那我们来看这个P是不是personon的实例一保存什么玩意儿,是不是true啊?哎,说白了就看啊,判断它属不属于人类啊,属于于人类,然后再看来个什么呢?Dog instance of。
20:17
Person DOS是do,属不属于人类易保存是不是force呀?哎,那我们说了,这样我们是不是就可以判断我们这个不同的一个类型了,所以通过构造函数让我们这些对象有了一个什么呀,有了一个类型的一个概念,那使用person创建呢?叫什么呀?叫person类对象,那使用dog类创建叫什么呀?叫dog类对象,那这样使用这个instance of,我们是不是就能。能区分了,但是注意之前那个能不能区分呀。这能不能区分呀,我是不是都是new object呀?哎,都是new object就不能再区区分了啊,我们再区分了,好,那这块呢,我们暂时给他说完了,但是我们这块啊,还是先看一个问题啊,看一个问题,看什么问题呢?直接来一个cancel,点一个log,来什么呢person,来一个instance of object,这什么意思呀?检查我们这个person是否是object的实例吧,诶来咱们看啊,一保存true,再来看dog instance of object走你干嘛呢?也是true,也是true,它什么意思呢?哎,这这object叫什么呢?哎,这object就相当于我们人类的那个谁呀,那个叫亚当还有夏娃一样,叫什么呀,这是我们那个老祖宗,所有的对象都是他的后代啊,所有的对象都是他的后代,我们来说所有的这个对象都。
21:46
不是我们这个object什么呀,后代,所以什么呢?所以这个任何的对象和我们这个object做我们这个instance of检查时,都会返回什么呀?都会返回处,为什么?因为他是什么呀,祖宗所有东西都是他,那干嘛呢?发展下来的都是他的这个后代啊,都是他的后代。
22:11
好,那这一块呢,我们这个构造函数就给它说完了啊,构造函数呢,我们这块再给它回顾一下,构造函数呢,它就是一个普通的函数,但是呢,它是用来干嘛的,用来创建这个对象的函数,而且它的首字母呢,我们习惯都是什么呀,大写啊大写我们说了person,如果你加了new,它就是一个构造函数,你不加new就是一个什么呀,普通函数啊,就是一个普通函数,它们的区分呢,主要就在这儿,你加不加new啊,加不加new,如果你加了new就当成构造函数去调,不加new呢,就是一个普通函数啊,普通函数,然后呢,我们来说啊,它们的构造函数执行流程就是什么呀,第一步上来立刻创建一个什么呀,新的对象,第二步,将新的对象设置为函数中的什么呀?This在构造函数中可以使用Z来引用我们这个新建的对象。第三步,逐行执行函数中的代码。第四步呢,将新建对象作为返回值返回。
23:11
这四步除了第三部是我们干的以外,其他的都是干嘛的?咱们都看不见啊,是浏览器干的啊,是浏览器干的,只有第三个这个代码是咱们写的,剩下都是什么呀,浏览器干的,所以注意在构造函数里,这个Z是谁,就是新建的那个对象啊,我们说使用同一个构造函数创建对象,我们称为什么呀?一类对象,这个构造函数呢,我们也称为什么呀,一个类,像这个person就称为person类,Dog就称为dog类,哎,我们将通过一个构造函数创建对象,称为什么呢?该类的实例,或者是该构造函数的一个实例啊就这么一个东西给大家记一下,然后呢,咱们在这啊再总结一下什么呢?我们这个这次的什么呀情况,这次情况我们要总结好几遍啊,这块我们先说一遍,叫什么呢?第一种情况叫什么呢?当以函数的形式调用时,我们这个this什么呢?This是。
24:06
Window啊,当以函数的形式调用时,这次是window啊,没有S啊,没有S,第二个呢,当以我们这个方法的形式调用时,哎,这谁调用谁调用方法this就是谁啊就是谁就是说调用方法这个对象啊,谁调用方法这就是谁,当什么呢?当以我们这个构造函数这个形式要用,这次是谁呢?哎,这次就是新创建的那个对象啊,实例也行啊,创建那个对象啊,这是我们这个三种情况啊,都给它背下来啊,包括我们这个构造函数的一个执行流程啊,都给它记下来,好,那这块呢,我们来停一下啊一下。
我来说两句