00:00
Hello,大家好,那这个小题呢,我们来给大家讲一下,用ES5的方式来实现前拷贝,我们再来封装一个函数。啊,在这的话,我们把它变成克二。好了,然后在这呢,我们把代码往上顶一顶啊,Function,然后C2括弧。里边也是有一个参数target啊。然后在这的话,判断还是少不了啊,如果说。Type of target要等于一个object,我们才去克隆。并且呢,这个target还不能等于谁啊那。好,然后如果说呢,你不满足条件的话,我就直接给你返回去,直接给你返回这个target。这个的话都是一样的。而在这里边啊,我们该怎么去做呢?首先呢,我们应该先创建一个容器。因为呢,需要往里边一个一个去写啊。然后呢,这个容器怎么创建呢?我们可以这样子,Result等于。
01:01
我们写它呢,还是写它呢,这个是不太固定的。因为如果这个目标数据要是一个数组。那我们应该使用它,如果目标数据是个对象,我们就应该使用它,所以说这块得做一个判断啊,A ay.is ara。把target放进来。假如说它是一个数组,那好,我呢就用中括号,如果说它不是个数组,那我就使用。花括号。这样的话,容器我们就造出来了,容器造出来之后呢,下边一步我们就开始呢,遍历这个数据。啊,这个target数据。那么因为target呢,它既有可能是一个对象。它呢也有可能是一个数组,所以说在选择便利结构的时候呢,我们得选择一个两种,两两种情况都适用的啊,最后得出一个结论就是我们可以使用复印循环。For in循环。如果你使用for循环,它只能变离数组。
02:01
啊,如果你使用for of循环的话,那个只能便利呃,具有迭代器接口的数据,嗯,所以说的话,咱们这呢,啊,只能是用for in循环去便利这个数据。好,便利时候呢,咱们知道for印循环,它不仅能便利当前对象生产属性,还能够便利它原型上面的属性,而对于原型上面的属性咱们又不需要,所以说的话,咱们得判断一下当前对象身上。啊,是否包含该属性。如果对象本身他的身上有,我们就去copy,如果说他对象身上没有圆形对象身上咱们是不去管它的。啊,所以说在这我们要做一个判断。If target there has own property。然后把K放进来啊,有的话我们再去copy。那么怎么来去copy呢?那就是将属性。啊,然后呢,往这个result当中去设置啊,设置到result结果数据中。
03:05
那如何来做呢?就是下标来个K。啊,就应该等于target,然后呢,下边K。OK,搞定。啊,就这么简单,然后最后的话,我们需要把result做一个返回。完成。好了,我们来测验一下,看看它这好使不好使啊。然后咱们先把这个修改先闭掉,看两个结果一样不一样。切过来右键的刷新。可以看一下啊,两个已经出来了啊,他们两个注意啊,不是同一个对象。我们可以比对一下。啊,切过来刷新啊,不是同一个对象,因为咱们这是新建了一个容器,新建了一个对象或者是一个数组。所以说的话,他这块是不是同一个。好,那么数对象这块的话能够出来,咱们再来看看数组行不行。我这为了方便啊,就直接来一个数组。我们写一个1234。
04:02
保存,然后切过来刷新页面打开看可以看一下啊,这块也没有问题啊。数组对象都是可以的。而且呢,这种拷贝它也是一种浅拷贝。大家可以想象一下,这块你就能想明白。我们这个result。Y。它在进行赋值的时候,其实是拿的谁啊,OB接Y的值,而OB接Y呢,它本身是一个对象,它存的是一个地址,所以说是把Y的这个地址呢赋值给了啊,最终结果的。这个Y属性身上,所以他们两个又形成了一个局面,两个值都指向同一块地址。所以说这种拷贝它是一种浅拷贝。好了,那关于前拷贝的第二种方式,我们就先说这么多。
我来说两句