前端复习--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}
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}
相关文章推荐
- 前端利器—2—JS对象
- JS,CSS是前端,JAVA PHP ASP是后端,数据库是后端的处理对象,非代表前后底
- 前端复习--javascript 对象作为对象的属性名字的研究
- 前端复习--js控制CSS3动画
- 前端复习--js面向对象的理解
- JS窗口问题处理:使弹出窗口保持前端显示的几种方法,及window窗体对象open()和showModalDialog()用法
- JS中BOM对象复习
- 前端将json数据解析成js对象失败
- web前端复习(二):js日期操作,实现时间显示和倒计时效果
- 【web前端-理解js原型】理解Javascript中的原型对象、原型链和继承
- JS窗口问题处理:使弹出窗口保持前端显示的几种方法,及window窗体对象open()和showModalDialog()用法
- jQuery如何返回一个类数组对象,js让一个对象的行为像一个数组一样
- JS下对象的复习要点
- MVC后台数据赋值给前端JS对象
- MVC后台数据赋值给前端JS对象
- Web前端面试题 Js把URL中的参数解析为一个对象
- avalon前端js直接通过ajax请求传一个对象到后台
- 复习---JS-Array 对象
- 向前端传list集合变成js中的对象
- 前端 JS 修炼(第一天)包装对象、作用域、创建对象