00:00
哈喽,大家好,这个小节我们来讲一下呢,迭代器它的一个应用。啊,相信很多同学呢,之前没有接触过迭代器呢,听完上一节课呢,他的感觉应该是这样子的。嗯,是吧,一堆问号哈啊,那咱们这个小节的话,通过一个实际的案例来加深一下大家对迭代器的一个认识和理解。那么D用来干什么呢?就是自定义呢,便利数据。自定义便利数据,就是按照我们自己的意愿来去便利这个数据,举个例子啊,我们这儿呢,声明一个对象。声明一个对象啊,然后呢,我们写一个cost。然后呢,班级。啊,我们写一个内幕这块来一个终极一班啊,终极一班STU啊。来一个数组有谁呢?诶,有小明。哎,然后呢,还有这个小宁。
01:01
还有呢,这个小天。好,那这个night。好,这是一个数,这是一个数组啊,然后这是一个数组的一个成员。注意这是一个对象,现在呢,我有个需求就是。我要便利这个对象。啊,我要便利这个对象,而且我要使用full of来便利。啊,来一个班级。Log来打一下这个V,看效果怎么样,好吧,保存看结果。他说什么呀,他说type,班级is notable啊,说班级这个变量啊,它不能够迭代。上不能够便利啊,为什么呢?因为你这里边啊,你并没有这个接口,也就是没有那个属性。那么这个时候我们要说一下,同学,同学,同学可能还说,诶,为什么要使用这个for of来便利呢?我使用for in循环便利不行吗?
02:03
形式型,但是呢,没有按照我的意愿去便利,我来说一下我的需求,就是说我要使用full of来便利,而且每一次返回的结果是这个数组的一个成员。再说一遍啊啊,可能有点绕啊,再说一遍,就是说我们使用for of来便利每一次返回的结果是这个数组里边的一个成员,比如第一次请返回它,第二次呢返回它,第三次第四次返回它。好,那么说到这呢,肯定很多很多同学还是有一个问号说,那如果说你要想便利这个的话,那好像也挺简单的啊,我们就直接班级点ts for each不就可以了吗?这样可不可以呢?这样当然是可以的,但是这不符合面向对象的一种思想。
03:00
我来举个例子,你比如说啊,我呢身上有一笔钱是吧,咱不是有一笔啊,这词有点太太有点太太夸张了是吧,比如我呢,有一个小金库啊,有一些小的这个存款。那么这个时候呢,你来问我啊,你来问我,你说哎,那个强哥你这儿有那个钱,有这个私房钱没有是吧,先先借我一点是吧,那这个时候呢,我可以呢,根据你的情况来告知这个结果。啊,我可以来,我可以来告知你的结果,但是你不能够直接来操作我这个属性。这个属性是属于我的,你不能说哎直接把我的内容就拿走了。这个是不行的啊,再比如说哎,我有一个手机,手机也算作是我的一个成员,对不对,那么你可以说,哎强哥,我能用一下你的手机吗。那我说哎,可以是吧,你打个电话是吧,发个短信之类的是吧,都谁都有个紧急事儿嘛,对不对,我可以决定给你还是不给你,但是你不能直接对我这个手机的成员去做操作。
04:07
因为你直如果直接这样做的话,那就不是面向对象了,是吧,你这个行为就有点儿有点这个过激了。啊,所以说我们再回到刚才那个需求,那就是我现在要按照自己的自己的一个意愿来去遍历这个数据。啊,就是我想使用for of循环来便利。啊,使用for of量,而且每次返回来结果是我这个对象里边的属性的数组里边的成员。第一次返回它,第二次返回它,第三次,第四次。好,咱们呢,是把这个需求给大家解释了一下。那么接下来我们就开始实现啊,怎么实现呢?首先我们先呢去加上。这个。这个。所谓的接口啊,说白了就是一个什么呀,就是一个方法啊,好了保存看看结果。
05:06
在这呢,我虽然说已经加上了啊,但是呢,这个结果呢不对,他说result of the symbol method is not an object,说你这个函数啊,有了,但是啊这个方法,所谓方法,这个方法呢,有有了,但是呢,你这个方法的返回结果不对。你应该干嘛,你应该给我返回的是一个对象,大家可以看一下看这啊创建一个指针对象,咱这没有对象,那咱们怎么办?哎,返回一个对象给你。保存,再来看结果。他说了,诶就说unDeFined is not a function,说unDeFi is not a function,为什么是unDeFi呢?别急,再看这。那么这个指针对象里边有一个什么呀?Next的方法。但是你看我们这有没有呢,咱们这块好像没有,那好咱们把这个next的方法呢,给人家加上。
06:02
啊,加上好,再切过来,然后保存再看结果又报错了,别急啊,他说it result on is not an object,他说你这个next的方法啊,它的返回结果是一个unde。并不是一个object来切回来看这。他说每一次每一次调这个NEX方法呢,返回的结果是一个包含value和当属性的对象,但是你看咱们这,咱们的返回结果是一个空的,所以说咱们这儿还要返回一个对象。里边呢有value value我写什么呀,我先随便写一个吧,好吧,写一个ABC,然后当呢我来一个再写一个false。表示呢,咱这个便利还没有结束,好了,接下来看一下啊,我保存。看着看着,看着看着,我只能停一会儿啊,他疯狂在输出,看到没有疯狂输出,好了,把它关掉。
07:01
啊,还关不了了,快点关掉好了,已经关了啊,为什么会出现刚才那个情况呢?它为什么会疯狂的输出呢?是因为在这呢每一次掉next的方法。它都返回的结果是一个false,就是还没有便利完成,还要接着便利,接着便利,接着便利,而且你每次返回结果都是它。啊,都是它,你看这个输出结果都是谁啊ABC。那么所以说咱们接下来的话呢,就要对这个返回结果去做一个处理。啊,第一次呢,返回它,第二次返回它,以此类推。那问题就来了是吧,我怎么去控制他们的一个向下的一个发展呢,啊,向下的一个就是变化呢,嘿,咱们这儿呢,就可以呢,去声明一个。变量。啊,索引。变量。然后呢,在里边我们开始根据这个下标来决定返回的结果,好如果说这个下标呢,它要是小于了this点这个STs.LS。
08:11
等一下啊。看一下,如果说咱index要是小于了它的一个长度,那么小于它的一个长度的话,就证明我们还没有结束,对不对?没有结束的话,我们的返回结果就应该是一个false,而这个value这块咱们应该怎么办呢?Value的话应该就是这个sto里边的当前下标的成员的值。所以咱们这应该写一个this.ts下标I。好,等一下等一下啊,这个这次好像有点问题。对不对,有点问题啊,问题在哪呢?因为咱们现在是在这个对象里边呢,这个this呢,它是指向这个对象的。所以说这块咱们可以在外层呢,哎,声明一个变量做一个保存,Let_this等于一个this。
09:02
好,复制拿过来。这是一种解决方法啊,另外一种解决解决方法就是你可以直接写成箭头函数也可以啊,也可以啊,好了,那么在这呢,我们完成以后。不急啊,Cost result等于它好,我把这个呢往往这边拉一拉啊。看一下,那有这个之后咱就完事了吗?没有啊,咱们还得干嘛,还得让这个下标自增。下标自增,然后来一个index呢,加加,因为它不自增,永远为零,永远为零,始终返回小明。那始终返回小明好了,那么接下来的话呢,咱们再来一个,哎哟,忘了返回了,在这儿还要返回结果。来return result。再来一个else啊,就是如果说呢,要是等于的长度了,就表示咱们已经完成了,那好,我就直接返回一个value为on the find。
10:01
然后呢当呢为一个true表示,便利完成。好了,来看看结果啊,右键呢,我先点开这个浏览器。打开控制台。然后在这呢,我先保,我还没保存啊,别急啊哟,这个地方I不对啊,应该是一个index。好保存。看这。啊,看这个结果啊,小明小明小天和kight,这个时候我们就完成了对这个对象的一个便利。啊,对对象的一个便利,就完全是按照我们自己的意愿去做的一个事情。啊,这就是我们使用迭代器的一个作用,实现自定义的便利数据。好,那这个案例我们就先讲到这儿。
我来说两句