00:00
这下一个呢,咱们来看看手写什么东西啊,回到这边来,呃,那就手写这个shallow read only和read only啊,If这个呢,咱们放在后边写,来看一下这个啊。好,那我在这边啊,依然是要定义函数的方式,我们那就定义一个什么呢,SHE10喽。Re shallow read only处理对象啊,函数啊。好,那后边还需要定义一个,诶,这是多了一个字啊,干掉定义一个什么呢?Read read only。On啊,函数好,我们来看一看啊,先来第一个吧,这个还是浅的嘛,浅的只读,这个是深的只读,哎,那我们从这开始来啊,首先来一个function。然后Shao Sha杀了。
01:00
好,这读起来怎么还有点别扭?走起好里边它也得需要给我传入一个他给的这么一个对象,我说一个数据是不是,当然这里边操作和之前的操作是一样的啊,我们仍然是需要判断。需要判断当前的这个数据是不是对象,我再强调一遍,数字也是对象啊,啊,如果不是,那我就直接返回呗,啊,这个注释我就不再写了,那下边的话我应该做判断啊,还是问target的这个数据存不存在呀,并且type of target,它是不是这个object类型啊,如果是的话,那么我们需要考虑一下,它是不是返回来的也是一个代理对象呢?对不对,所以说return直接来一个new proxy。哎,它也是代理对象啊,把它给它传进去,但是后边也得传入一个处理器,这个处理器的话,我们就写个re only。Handler好搞定。把它复制一份,那我上边这个位置啊,来一个华丽的分割线,好,那我上边就得来一个count的read only handler,它也是一个对象啊,那里边同样的也应该有,Get方法还应该有,Set方法还应该有。
02:17
Delete p property,咱们就写这么几个啊,就够用了,好,那同样的里边也应该有他给他对象,还应该有对应的属性。那下边呢,也是一样的道理,这个里边呢,还应该有个Y流数据对不对,好,然后我们来看啊,如果要是get进入到get就是获取数据吧,那获取数据的时候,那我跟上面还是一样,通过的是点get方法里边传入他给的以及prop。读嘛,哎,读是没有问题的,然后呢,我再加上一块CAno.log括号,然后呢,这个拦截到了读取数据了啊,当然我们可以把当前的这个pro还有这个result给它扔过来,最终返回return,我们会发现跟之前写代码是类似的啊,但是到这就不要了。
03:07
好,Set set呢,那我们就直接canl.WN吧,啊来一个提示,这个是只能读取数据什么呢?不能修改数据或者添加数据,哎,因为我这里边没有调reflect,所以说它就不能帮我去帮我去设置数据了呗,对不对啊,当然了,我在这个位置给他return一个true吧。好,下边这个是删除嘛,删除的话我也给它cano点落个括号,这个是什么呢?只能读取数据啊,不能删除数据,然后也给它return一个处,为什么?因为我们当前写的是什么呀,Shallow read only只读的啊,当然这个是钱的只读的,那这块呢,咱们就写完了,写完了之后呢,注意啊,这块是定义了一个什么,定义了一个定义,定义了一个什么呢?啊,Read only handler处理器。
04:06
哎,把它格式化一下啊,这个就写完了好。写完了之后呢,咱们再来看后边是不是还有一个read only的函数吧,哎,所以说我们把它也定义出来,Read only read,然后括号,括号它也需要一个,他给他目标对象。那么他的这个写法跟我上边那个写法几乎是一样的,所以说我就直接复制过来。啊,放到这里来,直接返回,他给的这个没有什么可说的啊,顶多加上一个注释啊,如果是不是对象或数组,哎,那么直接返回好,问题就在于这里,这里有点小问题。如果是指读的话,那么大家想我是不是还应该做这个什么呢?啊,Read only的处理啊,注意啊,如果它是它是深指读,Read only是深指读,Shadow only是前指读啊,那如果要深读深度这个指读的话,那我是不是还应该进行递归操作吧,所以说这个位置依然跟之前是一样,先判断当前A字瑞嗯,点A字先判断当前的这个数据,它是不是一个数组。
05:15
嗯,如果不是数组,那再看它是不是对象呗,啊,那我加个注释啊,这里是判断是不是对象,判断什么呢?判断它给它是不是对象,而上边的这个位置是判断T2GT是不是数组,那大家看,如果要是数组的话,那我是不是应该去循环便利,并且把里边所有的数据拿出来,如果再有数据的话,我还应该做read only深度的处理。所以说这个位置是target的点for each括号里边同样的应该有item和ind,同时同时在这里边做什么事情?哎,我应该看看当前的target这个数组索引位置对应的这个数据啊,拿出来对应的数据,当前数组里边索引位置对应的这个索引位置对应的数据就是item啊,对不对?好,那这个数据如果它又是一个对象或者是数组的话,那我是不是应该做递归操作的处理,而且还是物的递归操作吧。所以说这个位置还是。
06:16
R。A read only,嗯,Read read only处理,那里边就放入一个item,这不就搞定了吗?好,那下一个如果要是对象,那我是不是应该便利对象吧,上边应该是便利数组。为什么要变历啊,就是因为如果你对象里边还有对象,数组里边还有数组,数组里边有对象,对象里边再有数组是吧?那这种情况的话,我是不是应该把每一层的数据都给它遍历出来,做这个只读的一个深度只读的一个处理吧,哎,所以说要便利啊,那这块就是object.case之前代码也写过。那把它给它丢进来,这样它就变成了数组,可以for each里边的每个数据呢,再拿出来,拿出来之后还是当前他给他通过K的方式得到这个数据,而这个数据如果再是对象或者是数组,那我是不是还应该进行瑞物的操作吧,他给里边的这个K。
07:14
好,那这块呢,咱们手写shadow read only和read only呢,咱们就就写完了,写完之后呢,咱们还是老规矩,要去干嘛呀,测一把,看看有没有问题啊好,那接下来呢,咱们回到HTM这边来。嗯,加个分割线。好,这个位置咱们是测试she。Lo是read only readonly和readonly啊,那我就把上边这个再拿过来。拿过来之后呢,这回呢,咱们稍微的把它改一改,比如说我这个car啊,改个car撕了它,如果是数组里边是奔驰,然后边再来一个宝马。哎,咱们来测一把啊好,首先在这我们来一个proxy,这是几个三吧。
08:06
这个位置是三啊,我们来看一下啊三点诶多了这三点内没有。第2NAME啊,等于比如说我来个等等,咱们看一下啊,打开界面al加B。这块没有改啊,这个应该是shadow read only。我直接复制过来。保存一下啊。打开这个界面,刷新找到检查。我们来看一下,只能读取数据,不能修改或者添加数据,这说明不行吧?好,那我能不能读呢?我们来看一下canl,点括号proxy,这个是USER3点内。再去保存,我们再去刷新一下,大家看一下拦截到了读取数据内小名,哎,这是没有问题,读是可以的是不是,诶可以读取,这个就是可以读取,然后下边这个是什么呢?啊,不能修改也没有问题,好,那当前呢,咱们用的是这个浅的方式,对不对,我再来试一下删除,咱们再来看看啊。
09:11
接下来我们来看删除de delete proxy user3点啊,我去保存一下。来刷新,我们来看一下,只能读取数据,不能删除啊,这个是不让我们删的。不能删除,确实是不能删除的啊,嗯,但是我不信呢,是不是我再来一个什么呢,再来一个这样的操作,我来一个proxy u3点里边的卡,然后里边来个零,然后等于我给它换成一个奥迪,咱们再来看一下啊。打开界面,我刷新一下,大家看拦截到了读取数据,但是它有没有说不能让我去修改啊,没有,所以说它拦截不了我内部的这个删除啊这个啊,它是什么呢?呃,只读的,但是拦截拦截不拦截不了这个什么呢?啊深度的这个修改。
10:06
大家看啊,如果要是说拦截,要是能够有拦截这个修改的话,咱们可以看一下我这一刷新,大家看一下是不是只读不能修改或者删,删除了不能修改或者是添加,但是下边这个很明显这个是可以。是不是可以的吧,可以的。啊,可以什么呢?能够我们可以看到啊,这个位置它确实是拦截到了读取数据了,他能把你读取数据拦截到,这是没有问题的,但是呢,在这个位置我做了一个修改,它拦截到了吗?没有啊,拦截不到好,然后呢,我们就继续啊呃,再来一个什么,再来一个删除吧。再来一个删除,我把这个除掉。钱的啊,钱的制度。嗯,在这再来一个delete。Delete,来一个pro里边的car,然后中号里边的零。啊,咱们来看一下啊。啊,去刷新一下,大家看拦截到了读取。
11:01
能不能删,说明也是可以删除的,对吧?啊,它还是拦截到了读取,拦截到了读取,我上面这个也给他这么写。啊,这个也是拦截到了什么呢?读取啊,但是这一个怎么的呀,可不可以删除的,可以删除是吧?可以删除啊。这个是。呃,可以修改。好保存一下,嗯,好,接下来呢,咱们再来测一下啊。还是把它复制一份啊。在这个位置改个名叫四,然后呢,还是啊跟上边操作是一样的,我们先来看看can.log个括号,来一个proxy。PROXY4里边的这个,呃,PRO4内啊,保存一下,注意啊,这个位置我要换成read only了,Rely。
12:01
保存一下,我们来看看效果啊,刷新首先拦截到了读取数据,而且数据也确实读取到了,没有问题啊,可以的。啊,拦截到了读取。那下一个我们再来看啊,我再cancel.log个括号,来一个PRO4点什么呢?Cars里边的零。打开界面,我们再去刷新一下,大家看一下,诶,我上边这个先注掉啊注掉了啊注掉了之后,然后我们再去刷新一下,我来看蓝截到了读取拦截到了读取零奔驰,那就说明确实是深度的这个什么呢?啊读取被我也拦截到了啊,这是没有问题的,然后呢,现在我把它注释掉,我做什么事情,我修改啊pro它name什么呢?等于。好好。然后我们再去刷新,一刷新,我们看只能读取数据,不能够修改。这个是只读的啊。没有问题,好,干掉,那我们再来PROXY4啊,里边的car是零。
13:07
等于比如说哈哈,然后保存,我们再来看这个啊,然后去刷新,大家看拦截到了读取,而且是只能读取,这说明它里边数据是不能修改的啊,这个也是只读的。那不能修改的好,那我们现在再来什么呢?再来删除delete pro user里边什么的,点name,我们看看能不能删啊。刷新我们看一下只能读取数据,不能删除数据,是不是只能读取数据,不能删除数据,哎,我上边这个位置怎么写的呀。嗯,在这呢。嗯,这块的话我也用warn吧。这样会好一些啊。好,刷新下啊,只能读取数据,不能删除数据啊,这是很明显了,好,那么这个数据不能删,那我不信呢是吧,我再看看。里边数据能不能删呢?Delete process user4点中括号来个零,然后把它给删掉。
14:03
然后再去刷新,再刷新看,也是读取到的数据,然后只能读取不能删除啊,不像上边,上边是什么呢?呃,能够深层次的数据可以修改,深层次的数据可以删除,但是到了下边深层次的数据是不能修改的,深层次的数据也不能删除的啊,所以说咱们这个read only是深的read深的只读啊。好,那这块呢,咱们又把这个手写shall read only和手写read only呢也说完了啊,课后的时候呢,大家也需要测一测啊,好,那这块呢,咱们就先到这里啊。
我来说两句