下面是一段判断信息详情是否有修改的逻辑,贴上项目展现:面试
那么问题来了,你们自行脑补一下如何判断图片是否有修改。json
var a = { name: 'kelen' }; var b = Object.create(a); b.name = 'boke'; console.log(a.name);
var a = { person : { name: 'kelen' } }; var b = Object.create(a); b.person.name = 'kobe'; console.log( a.person.name );
为何第一个修改obj2的name属性,obj1的name输出是one,而第二个却能够改变呢?函数
Object.create()方法建立一个拥有指定原型和若干个指定属性的对象。spa
Object.create(proto, [ propertiesObject ])prototype
proto
一个对象,做为新建立对象的原型。3d
propertiesObject
可选。该参数对象是一组属性与值,该对象的属性名称将是新建立的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProperties()的第二个参数同样)。注意:该参数对象不能是 undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。code
抛出异常
若是 proto 参数不是 null 或一个对象值,则抛出一个 TypeError 异常对象
一个具备指定的内部原型且包含指定的属性(若是有)的新对象。blog
Object.prototype 属性表示对象 Object 的原型对象。接口
__proto__
属性表示对象 Object
的原型,原型的值能够是一个对象也能够为null
,好比说Object.prototype.__proto__
就是null
从上面的例子分析,当var b = Object.create(a);的时候,不等同于b = a,实际上就是
b.__proto__ ==> a; b.prototype ==> a.prototype;
当咱们对b.name = "kobe"
的时候,其实是在b对象新增一个属性,而且赋值,可是在b.name = "kobe"
以前打印console.log(b.name);
的时候输出"kelen"
,是由于在原型链去找到a的name属性,因此能够取到a的值
因此下面b.name = "kobe"
并不会改变a的name属性,若是要实现a.name最后的值为kobe的话,能够这样写b.__proto__.name = "kobe"
;
而第二种状况,
b.person.name = "kobe"
却能够改变a.person.name的值是由于,b.person是一个a.person的对象引用,当b.person.name进行赋值,实际上就是对a.person.name进行修改,举一个简单的引用类型的例子
var a = { name: "kelen" }; var b = a; b.name = "kobe"; console.log(a.name); // kobe
var a = { name: 'kelen' }; var b = Object.create(a); b.name = 'boke'; console.log(a.name); // kelen
var a = { person : { name: 'kelen' } }; var b = Object.create(a); b.person.name = 'kobe'; console.log( a.person.name ); // kobe
//原始接口拿到的福利信息, //图片列表对象 originInfo={ welfareName:'中影国际', imageList:[ { id:'5157', wIFImgUrl:'http://tcw-wsq.b0.upaiyun.com/2016/07/12/34/20160713165313449.jpg' }, { id:'5158', wIFImgUrl:'http://tcw-wsq.b0.upaiyun.com/2016/07/14/34/20160732112832397.jpg' } ] }; //$scope.welfareInfo=originInfo; //no,彻底行不通 //$scope.welfareInfo=Object.create(originInfo); //no,不能够 var originInfoCy=JSON.stringify(originInfo); //stringify用于从一个对象解析出字符串 $scope.welfareInfo=JSON.parse(originInfoCy); //parse 用于从一个字符串中解析出json 对象
对于这个问题正确的处理方法是,将originInfo对象转变成字符串,字符串并非引用类型的,继而再转换成对象,它就完美解决问题啦啦。。。