为了账号安全,请及时绑定邮箱和手机立即绑定

copy存在的意义

copy = options[name];

//覆盖拷贝

target[name] = copy;

为什么不能直接写成 target[name]=options[name]

正在回答

2 回答

以下是我的理解,不知道对不对

貌似是深浅拷贝的问题

copy = options[name]其实新建了一个与 options[name]相同内容的对象,这样使用target[name]时候就不会影响到options[name]的值,是深拷贝;

target[name]=options[name]的话则是浅拷贝,target[name]其实是options[name]的引用,target[name]改变,options[name]也会随着改变。

1 回复 有任何疑惑可以回复我~
#1

杰枫 提问者

带有copy是不是也可以这么写:target[name] = copy= options[name] ,这样话都是把options[name]的引用赋给target[name] ,至于深浅拷贝,确实我还是不明白哎
2016-08-02 回复 有任何疑惑可以回复我~
#2

慕无忌2114720

你的理解有问题,对于复杂对象类型的传值是引用传值,而不是拷贝传值。所以这里的copy变量只是引用了options[name]对象,并不是拷贝。
2019-07-01 回复 有任何疑惑可以回复我~

和target[name] = options[name]没有区别,这里的copy没任何作用。

估计老师是参考jquery源代码写的,但源代码中copy变量还做了其他操作。


1 回复 有任何疑惑可以回复我~
#1

chen87870098

我同意,这里不是深拷贝,var deepCopy= function(source) { var result={}; for (var key in source) { result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key]; } return result; } 这是一个深拷贝的写法,里面根本没有用到copy这种东西
2017-01-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

copy存在的意义

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信