您的位置:首页 > Web前端

前端复习--js中对象的诡异行为

2016-09-08 18:57 211 查看
正常简单生活:

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}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: