00:00
在分析它的源码之前呢,我们这个里面呢,用到一些小的技术点,我们要把这些小的技术呢,先研究一下,到时候看代码的时候呢,咱才能看懂啊,这里面我列出来几个比较关键的。点我们来看一看,一个点一个点的来看啊,这里面一共有六个点啊,把这六个点呢,拿到我们的代码这边来,嗯,拿到这边来,接着来把它做一个注释。好,那下面呢,我们就一个一个看啊,因为这个里面呢,有都是我们后面要用到的啊几个点,首先第一个啊,将伪数组转换为增数组,这个该怎么做。好,先说一下尾数组是数组吗?不是,那他什么类型,那他要是数组了,还还叫尾数组啊,不自相矛盾吗?啊,它本质上是一个对象对吧,只是这个对象有哪些特性,有认识属性,还有一个。
01:09
它有一些下标属性,说白了就是可以通过下标来去取对应的属性值对吧?看起来像一个数组,但是它本质上是object对吧?比如说举个例子。我们这里面不有很多ii吗?来,我来去取到这所有的I is,那就I is呗,对吧?来这一个根据什么来举是不是标签名,那就来一个什么document get element by。哎哎。对吧,那当前这个is是一个什么呢?是一个增数组吧,啊这个地方就是说is是伪数组。
02:05
那我怎么验证它不是真数组了?那我要验证它是伪数组啊,OK对吧,什么?它的结果应该是个什么?Force能不懂?来,我们来看一下。它能便利循环,这个大家都知道啊,我就不再去验证了,我们来打开看一下。是不是扩散啊,OK,但是譬如说我们要取啊,取第二个ii的文本内容,我该怎么做。那我是不是I is中号,一接着点了HTML,我就能得到那个文本。
03:01
对不看起来用的时候就感觉像一个数组是吧,它本质上它不是。那不是这一问题,譬如说我们数组有一个方法叫for each,有吧,它有吗?也就是说我的is,我想点for each啊,我还不掉,我就这么整一下,那也就是说现在它的结果啊,第一个是这个,第二个是这个,那第三个结果是多少呢?是吧安。为什么是I呢?没有吗?我们说过我们从对象中取属性不存在就是返回ID呢,因为他查找的是什么。圆形链还记得不,对象属性找的是圆形链。啊,如果找不到是不是返回安啊,我们来看一下。对吧,好关键吧,我就想希望去通过for一起去遍定所有ii对吧?啊,我要想办法根据这个尾数组产生一个什么呢?增数组啊,这个怎么搞,其实哎,E6里面是有语法做的。
04:17
E里面有一个语法,这个from from传这个I is啊from就这是六的语法,但是呢,我我们现在说的是ES5的语法,该怎么去做啊,来看着。在ES5店有一个方法叫什么呢?Sne,或者叫slice,我们去MDN上面去看一下,这个方法是用来干嘛的。啊,找一下MDN啊,数组里面有这么一个方法的啊,叫a.S。
05:01
就这个呗。好看那样吗?啊,这个代方法它是对数组进行一个类似于截取啊截取的一个功能,它是一个相当于类似于,这里面个概念叫前拷贝,什么意思呢?譬如说我数组这么多是吧,我想产生一个新数组,新数内容吗?譬如说从哪二位到第四位。是吧,这该怎么做呀?就调用这个函数,调用这个方法指定。几个参数能不能起始位置和它的一个应该是个解数位置,看主要看一下它的这个语法的参数啊,Begin和什么end。能看到吧,啊OK,那如果我不指定呢。也就如如果我不指定呢,他就全部从头到尾。
06:04
这个能不能懂啊,OK,就完全的拷贝了一份。能懂不,但这个方法是不是宿主的呀。算出这个方法在哪个位置,是不是在数轴圆形上面。好,我就利用一下这个方法就能够去实现。打开啊。我要利用一下,除了利用它,还要利用一个,有一个方法叫扩,扩一什么作用,让一个函数在指定对象上面就用。能不懂,本来这个函数是不是只能随调数组来调,对不对?来现在呢,我做的事情是什么,大家看到啊,我写法,我还有另外一写法,就是这个太点,那我这么写行不行。可不可以,这一个是通过实例来去调方法对不对,而这一个是不是原始的,就是本来我这个方法就让你。
07:06
原型上对吧,如果从效率上来说,其实这种应该更好一点。为什么?你想啊,这个地方我至少多创建了一个数组吧,是不是多占一份内存?是不是,而且这里面还涉及到我数组本身是没有这个方法,而在圆形里面我就要找两次,是不是还找得到,而我这个呢,是不是直接就找到了我呢?不是这么吊,我不是这么吊。我是怎么调的点括能接着指定is。那也就是说,也就通过is去调用这个sla呗。嗯,老师这个是这这个尾数组没有这个方法呀,这不就扩的厉害之处吗。
08:01
或者中什么来着,让任意让一个函,这实际上返回是个函数啊。让一个函数成为指定对象的方法是不是进行调用?是吧?等于说老师它的内部调用就没问题吗?刚好就没有问题,因为它内部在截取的时候,它就有一个取认和数字下标。去便利,它内部其实有便利的。啊,OK,那现在我做完之后,我的I is变没有。变没有没有,它是没有变的,只是什么呢。产生了一个新的对吧,那也就是说此时。我把他们一换。看到吗?那现在结果数第二个呢,应该还是一样的,对吧,接着是不是一个函数能不懂啊,一个函数来看一下是不是啊。
09:18
对不对的,那也就是说现在我们有了这个语法以后,我们是不是可以去便利通过或一起去遍历数组了。啊,这是它里面用到的一个语法啊,就是这个通过通过这一点你能看到啊,这个扩的厉害之处。啊,在GS里面任意一个方法不一定是那个对称内容,也就定义的时候,我创建了一个对象。在里面定义了一个方法,叫test。定义的时候确实这个方法是不是就是这个OB阶段,但真正调用的时候一定是obg调吗?那可不一定。之所以能慢变化,是因为我们在调的时候,我们Z是谁,或者说谁在调,是不是得看最终调用的时候怎么调的呀。
10:08
你比如说举个例子,我定义了一个变量叫test。我等于OB节点。对吧,我接着去执行泰大。你想嘛。那最后你说这个函数里面认识是obj吗?是吧?不是啦,现在是谁了?如果就这么ob.t等于T就是我。也就函数里面这是谁了。谁文斗吗?这不很直接的,我今天就直接调用吗?对不对,当然我我还可以怎么着了,大家看到我还可以OB接点test,我点。或是去执行这个孩子吧。我接着呢,穿OG two5。
11:00
那你想this还是OB吗?不是。是谁啦o two?啊,函数中的this在定义的时候是根本无法确定的。前面说过一句话,对吧,只有在执行的时候才能确定。啊。这个要注意啊。好,这是这一个啊,下面一个比较简单,叫漏点漏。什么意思啊,节点类型,首先我们要说一下啊,这个节点。啊,节点在道里面不有个概念叫节点吗?其实是一个抽象的说法,譬如说我们要去,譬如说我们说啊,我们要操作这个节点。具体是什么节点呢?对不啊,也就是说节点有很多种实现类型,对吧,哪些类型最大的节点是一个什么?是元素吗?
12:03
最大的节点什么类型?不知道。Document。都可代表谁文档,什么是文档?你说文档可能别人不太懂的人,他不太清楚文档,你这个文档到底指谁呢?就是HTM,就是整个HTM页面。或者叫HP文件能不懂啊?OK,再小一点的element听懂不好,还小一点的了,有两个attribute,还有什么?T。这个是文本节点,这个属性,这个元素,这个文档。能没有看到,也就是说我们说操作某一个节点。是这个节点是比较抽象的,我们可能是操作文档,也可能操作,也可能操作熟悉,也有可能操作文本。
13:06
来,可以给大家看一下。我们去,哎,应该在这就可以搜的啊,搜一下搜个什么呢,搜个漏。嗯,节点不是漏ES啊,是收节点。看什么呢?大家看一下。怎么个意思,这个说的是我们下面节点下面有哪些种实线这么多,但其实我们常用的啊,就那些,我们来说一说这个属性对吧,往下面看啊往下面看。看看有没有document。有没有?有没有element,有,还有一个刚才说text。
14:02
对不对,这一个先必须得理解,就是节点下面具体有哪些类型,这个是大家应该要知道的。啊,OK。你那些方法很有可能忘,忘了就忘了,这都没关系,因为我动的原生的方法其实是挺难记的,方法没有特别多,大家只要能记住常用的一些就足够了啊。好。那节点定义在节点里面呢啊,有一些它有一些对应的属性和方法,PD说属性啊,我们刚才说的要说的一个东西叫什么note。那你说我的节点有这个属性,我得到一个元素有没有标签有没有,这个属性有没有。有,当然有,怎么为什么有,怎么理解这个东西,你想嘛,继承关系吗?负极定义在负极上面,所有节点都应该有这个属性吗?跟你是什么节点有什么关系吗?没有。
15:00
你想如果人啊,能说人有,譬如说人有名称,那无论你是什么人,或者说动物有名称,你就应该有名称,对吧,因为你是个动物嘛,你是个特别的动物而已,对不对,一个意思啊好。它呢会有一些标识类型的一些属性,那后面我们取一下,我就具体再一个一个说了,大家自己看啊来我们来看一下这个load.load tap。啊。我这里面譬如说举个例子啊,我来看一下我这个div是一个元素节点吧,来我们来去取一下这个div怎么取。是不是ID啊?来,我先来一个元素节点,叫element啊,Did叫什么?刚才那个ID叫test。这得到一个元素节点吧,好,我再来得到一个属性节点AT怎么得了,看到我。
16:07
Get a tribute。穿什么呢,ID?可以吧,好,再来一个文本节点,Element load。嗯,First有一个概念叫first什么意思?第一个。文本节点不是这文本啊,文本只是文本节点内容而已,对不对,好,来,下面我们要去打印输出一下这个animal的点。Note点。啊OK,它的一个load啊,也是load type啊,都是load type,还一个text load点,呃,这样写错了是吧。
17:08
呃,A tr能看懂,好,那这里我们来去看一下,刷新一下。分别是什么?123,这个不用背啊,不用背,我想告诉大家,就是不同类型的节点,它的这个load type值是不太一样。那也就是说这个load typeb是不是不同类型节点的标识,就是老师,我们要需要知道这个东西吗?需要什么意思啊?有时候别人传给你一个节点,他也没有告诉你具体是什么节点。对吧,你现在呢,需要调用节点的属性或者方法的时候,如果我就是掉落的type,我需要知道具体是什么节点吗。不需要,但譬如说举个例子啊,举个例子,我现在需要去调用它的,譬如说get区别。
18:05
我需不需要知道它的类型,需不需要,必须需要,为什么,你想想看,获取标签,获取标签的属性那个那个首先他得是个什么。它得是个什么呢?你获取属性是什么类节点才有元素节点?也就是说,我必须先判断它的load type为几。一。对不对。大家知道不同类型的节点,它是不是有一些特有的行为?那一旦涉及到我要去调用特有行为的时候,那我先得保证什么,你的这个类型是不是对的。对不对,尤其是在去写库的时候,其实咱自己在写应用的时候,咱基本上没做没用过这个说实话为什么。
19:00
这都是我自己取的,我当然知道它是个元素,对不对,我当然知道它是个文本,我当然知道它是个属性,对吧。麻烦地方就在于啊,我们现在是要研究一个库内部在做什么对不?那他很有可能就要去知道你到底是个什么节点。啊,这个时候not就非常用。其实这个难度没有什么啊,这个具体的值也不用每个都记住,你记住它也没什么意思,你只要知道它有不同就够了。OK。这个能懂吧,嗯,行啊,这是这个。这个先停。
我来说两句