正常简单生活:
var a = {}
var b={}
a.name = 1;
->1
b.name = 2;
->2
正常稍高级情况:
var a = {}
var b = a;
a.name = 1;
a.name
->1
b.name = 2;
a.name
->2
或者你对上述状况,不屑一顾,不就是两个变量指向同一变量吗?
var a = {state: {}}
a.state->Object {}
var b = {};
->undefined
a.state = b; //对象等于对象,这会使a与b形成双向绑定!!!!
->Object {}
b.name = 2;
->2
a.state.name //惊艳地发现a竟然页跟着变化!!!!
->2
a.state.name = 9 //a变化也会使b变化
->9
b
->Object {name: 9}
//从前有一个对象var a = {state: {}},有一个坏人派出对象var b = {}取改变a本来的样子,对象b使用很猥琐的方法-他向a表示愿意在a主场见面:a.state = b; 天真a以为由主场优势,答应了;b达到目的,并在结束会面之后,改变自己体内对象:b.name = 2; a 在晚些时候感到不适,终于发现自己已经发生异化a.state.name(由无变成了1). a很恼火,它和我一样不知道为什么,以前的书里没有讲.但好消息是有对策可以防范b的攻击:
对策:
var a = {state: {}}
var b = {};
a.state = JSON.parse(JSON.stringify(b)) //安保:关键的这一步!!!,JSON会返回一个新的对象!!!!
b.name = 2; //开始实验!!!!
->2
a.state
->Object {} //这是见证奇迹的时候!!!!
a.state = JSON.parse(JSON.stringify(b)) //b.name =2 之后,再次给a赋值
->Object {name: 2}
本文通过具体的JavaScript示例,展示了对象引用带来的双向绑定问题,并介绍了如何利用JSON的深拷贝方法来避免这一问题。

被折叠的 条评论
为什么被折叠?



