00:00
好,那我们就开始啊。嗯,上午呢,我们已经说过了必包相关的一些东西,先我们看一个必包的应用。嗯,这里面就有一个新的概念,可能大家不太懂,叫JS模块。也就是说我们可以去利用B包呢,来去定义接S模块,那什么是接S模块了,对吧?哎,下面我们就要给他一定的定义啊,JSS模块呢,就具有特定功能的一个JSS文件,那也就是说我要定一个JS模块首先得干嘛呀?是首先得放一个解锁页码。好,那我要取一个名字。模块怎么说我啊,我就要创建一个我的模块,有这样一个名字,这个名字不是绝对的啊。
01:07
好,那这个里面怎么写呢?我们来看一下。下面模块呢,还有一些特点,也就这个JS文件呢,还有一些要求,什么样的要求呢?将所有的数据和功能封装到一个函数内部。大家知道我们的建设模块是具有特定功能的,那特定功能就有一些东西来,譬如说我的一个函数,我就叫买魔流吧,啊在这个里面我去定义一个假设啊,我来定一个,定一些数据,我要定一个数据叫这就叫mecy,你吧随便搞一个啊。啊,或者叫MY,好,这是一个数据啊,下面呢,我还去定义一个函数啊,名字随便写,我就叫,呃,叫什么呢?Do something。
02:07
这个这个写大写。能不能看到这个代码,肯定是能看到的,对吧,好在这里面呢,我就去打印输出一下do something。再打印加上一个message,好,我这里这样做啊。我这样做硅好,我要输出的时候,我把这个message我都把它变成大写,怎么说。我要把它都变成大写。Two as。可以吧,没有问题,好,我再来一个。再一个啊,呃,再来一个就是do。阿,表意一下啊,接下来我在这里面呢,也打印输出一下这个函数名字符串加括号,那我希望输出这一个字符串的全部小写,行不行,To no case可以吧,可以,好,那这一个文件写好以后啊,我问大家在外面能看到这个message吗?能不能?
03:33
不能,他是不是私有的啊,私有的属据啊,私有的属性,私有的属性私有数据,嗯,好来啊,那也就是说我们写好这一个东西以后,大家想啊,假设我现在呢,将这个JS文件可以引入啊,可以来一个引入写什么。
04:05
这。是吧,好,那我问大家,你说我能调用这两个方法输出东西吗?现在我能看到谁,我现在是不是能看到他呀,可以可以,好,那它是个函数,我最终我是不是下一步就执行它,但是得先写一个什么一是吧。那我执行它可以吧,但执行它没意义啊,那我执行它了以后,这个数据是不是又释放掉了。但我一直习完是不是就释放掉了,但是呢,现在我希望什么大家看呢,这个模块还有后面一句话非常关键,只向外暴露一个或嗯一个包含N个方法的对象或者函数啊,就说前面的不用管后面啊。
05:08
也就是说,如果我们这种做法是没有意义的,知道吧,因为执行完以后就释放掉了,我还是不能去操作这个message吧。但我希望他能够操作,怎么办?我是不是要向外暴露一些东西对不对?好,现在假设我想暴露这个函数,是不是它就可以,那好了,如果暴露它我怎么用?那我执行得到是谁?得到的是不是函数好得到的这个函数,那函数能不能用,怎么用括号之行。可以吧,我们来看一下应该是不是有打印输出是干嘛呀。
06:05
有没有,是不是有啊,那我能不能再掉了,可不可以,也就是说我这两个输出是不是都能输出那个数据。要不说来。嗯,如果我直向向外暴露它,那是不是这么约定就可以了,但现在呢,我想暴露这个函数和这个函数怎么呢?那我想划入两个函数。暴露一个函数,是不是直接把那个函数暴露数据就可以了,关键我想暴露两个函数,那是不是我想暴两个数据啊,那我想暴露两个数据的话,那你怎么办呢?是不是用一个容器把那两个数据封装起来呀。那我用什么容器来碰撞这两个函数啊,对象呗,咋封装是不是都要给它取名字啊?可以这么写吧,啊,尽量名字都一样吧,就。
07:15
有没有看懂这两个名字一样代表他们是一样的东西吗?一样吗?这个本质上是什么字符串对不对?这一个是什么?是不是对应我的函数名,实际上最终是不是得到那个函数,好,我一旦这么这个啊,大家看呢。下面的这两个呢,是操作这个数据的行为啊,操作数据的函数。这个是向外暴露。对象,而这个对象里面是包含了外部可以访问的一些方法,能不能懂给外部使用的什么方法好,那我现在这种写法对吗?对不对,不对不对,我应该怎么写呢?它这个地方首先不能写这个名字,这个名字不太好了,对不对啊,一看就像个函数是吧?那我就写一个module行不行?
08:28
可以吧,而我这个摸里面有几个方法,两个,一个是do something,另外一个是读。那现在应该会有什么两个输出对不对对的,好,现在我请问这里面用到B包了吗?用到没有用到了啊记住用到了B包啊来我们可以来去访问看一下是吧,就是这个文件好我在这里面呢,打一个断点可以吧,可以刷一下。
09:18
刷完以后呢,我们可以去看一下do something和do something这里面是不是都引用了外部的这个属性,外部的这个数据主变量能看到吧,好打开。有这个有没有,是不是像麦一样,看走吧。啊,这个要能看懂才行啊,好没什么问题啊,这是这一个大家需要去搞清楚的。那其实呢,除了这一种定义的方式,现在我们就是在其实上啊,就在定义一个GS模块啊,除了这种方式,我还有一种方式,我写了以后我们来再来做比较啊,大家以前没写过,可能没什么感觉,我先写一下。
10:09
这个都一样。下面把。不用不用这个现这一次我不用了。买魔书吧。嗯,我这么写,我外部写的是什么语法,匿名函数自调用是吧,接着还是一样,这些数据是不是私有的,也就是说我不向外暴露的话,外面能看见吗?不能,那现在前面我们是不是通过return来向外暴露,那如果是匿名函数是调用,怎么样向外暴露了,把这个要暴露的东西添加为什么window的属性。
11:18
能不能看懂,那这样的话大家想啊,这样的话我们现在去用一下,看看怎么用,先引入我们的JS叫my module q是吧,好接着来一个它啊来一个一不是啊是一是吧,好下面我怎么用。我是不是直接就能看到我的模块对象了,是不是现在直接叫什么do something。可不可以可以好来看一下有没有运行起来。
12:05
下面这两个怎么一样写错了是吧?是不是可以好,那我再问一下,这个里面第二种方式有必包吗?有没有有。这不是外部函数吗?这不,内部函什么内部函数引用了外部函数的什么逐变量。有吧,有,那我就要去问一下大家,你说这两种方式有没有用,有没有好的更好的一种,你觉得你要用的话,你会选择哪一种啊,为什么用第二种啊。因为使用起来什么是不是更直接,更方便,说白了我们的第一种要想得到模块,最终那个对象返回出来,对象必须先干嘛,是不是你先要执行函数才行,对不对,也就是说你执行函数了,才能得到你想要的那个目标吧,而我们用第二种方式啊,第二种方式。
13:24
它的好处非常简单,我需要先执行什么东西才能得到吗?不需要,我一引入这样一个JS文件,这个模块文件,我是不是就得到我想要的东西是吧,能不能懂这种。更好一些,但他们其实这两种方式是不是都有B包啊,都同样都是利用一包,只是使用的方式不太一样。啊,这个也是向外暴露啊,作用都是一样的。
14:00
只是一个是用return,也就是说你必须执行这个函数是不是才能得到对吧,而我这个不需要。嗯,因为这里面都用到了B包,都是利用了B包这一个技术来去实现。啊,但有的时候我们会这么想。会这么写,这么写行吗?那人说,老师,这两种写法有什么区别吗?是不啊,就是我这里面我不传他,我不接收,这温暖能不能看见?能不能能他先是在当前座运里面找有吗?没有,没有以后去哪找,去万全军的全局是不是能看到温度的,实际上是有了对不对,好,那这种搞法以你以后就会知道,我这种平常都这种写法。
15:04
这种写法有一个好处啊,我不知道大家有没有知道,就代码压缩。代码压缩的时候,会把那个我们的一些局变量,一些函数吧,变成什么呢?变成abcd。之类的一些单个字母的字符,也就说白了,我这个能不能压缩成W。可不可以,我能不能这么写,可不可以,可以,但是如果,如果你没有定义。这个能不能压缩W能不能不能。啊,后面我们会说到代码压缩,他会去做一些什么事情啊,这个你就在记得也行,没关系,我先跟他提一下。
16:02
好,这里面呢,我们就用一包去实现了一个自定义的接属拈,再跟大家说一遍,这个拈是一个什么样的东西,首先来说,简单来说模块就是一个什么,先是文件,它具有一个特定的功能,其实特定功能就是有些函数操作一些数据啊。而他先要将所有的数据和功能。都是封装在一个函数内部,也就是他开始是什么呢?私有的,要想私有是不是必须得放到函数里面去,我将一个数据放到对象里面,是不是有的,再跟大家说一遍,我把一个数据直接放到一个对象里面,是不是,是的是吗?比如说我有一个,我有一个我的我的姓名是胖,对吧?我把它放在内部等于烫,这是私有的吗?是还是不是,不是,为什么?因为对象的属性是直接可接。
17:03
对,不能不能理解对象的属性是不是外部直接可见通过对象名点属性名不就达到了吗。我们要选室友怎么办?必须整一个函数,因为函数才能分域嘛。对不对,你创建一个座椅,是不是创建了一个封闭的空间呢?啊,我在一个函数里面去定义内部的一些数据和操作数据的一些函数,那下一步很关键,指向外一步,暴露一个包含N个方法对象的对象,这N个方法那就跑住了,可能是两个,可能三个,甚至有可能是一个。可不可以,那我向外暴露一个函数行不行?可以,我就需要外向外暴露一个函数啊,这没什么对不对,那如果我向向外暴露两个函数了。封装成什么对象?
18:03
我想暴露两个函数,必须暴露两个行为嘛,你暴露两个数据嘛。啊,这些基本的一些理论大家应该要懂。好,这是这一个。嗯,当然这个主要还是要理解啊,你要把它理解,你这不能说完全理解把,至少要理解的差不多啊行。
我来说两句