有关对象克隆和使用了prototype后,for..in语句的问题
2007-07-24 15:36
567 查看
今天遇到个问题,开始还觉得很奇怪,后来才恍然大悟,原来是对象克隆里面浅拷贝和深拷贝的问题。看书的时候意思知道,可就是不能联想到能用在哪里?以致出现bug后才发觉玄机原来在这里。问题是这样出现的:
strTree["000601"]=strTree["000501"];
strTree["000601"].changeFlag=1;
结果发现strTree["000501"]和strTree["000601"]的changeFlag均变成了1,原因很直观,是由两个json对象引用的是同一个对象地址所致,当然可以采用重新申请对象和地址的初始化方式解决不同引用的问题,然后对属性逐一赋值,如:
function exchangeJson(divObj,id1,id2)
// Authors Birdshome, 麻袋@博客园
Object.prototype.Clone = function()
for(element in strTree)
var obj = new this.jsonTree.constructor();
for(flag in this.jsonTree)
{
if(obj[flag]!=this.jsonTree[flag])
}
通用的问题也解决了,也不害怕prototype再有扩展了。搞定!
问题本身没什么,但反映出来的问题却不可小视,那就是自己对原理性的东西关注不够,解决问题的方式也就只是从网上搜,或者求助于别人了,当然不是说这样不好,但要创造,要开创性做一些东西的话,显然这样是不可能办到的,给自己提个醒吧。
strTree["000601"]=strTree["000501"];
strTree["000601"].changeFlag=1;
结果发现strTree["000501"]和strTree["000601"]的changeFlag均变成了1,原因很直观,是由两个json对象引用的是同一个对象地址所致,当然可以采用重新申请对象和地址的初始化方式解决不同引用的问题,然后对属性逐一赋值,如:
function exchangeJson(divObj,id1,id2)
// Authors Birdshome, 麻袋@博客园
Object.prototype.Clone = function()
for(element in strTree)
var obj = new this.jsonTree.constructor();
for(flag in this.jsonTree)
{
if(obj[flag]!=this.jsonTree[flag])
}
通用的问题也解决了,也不害怕prototype再有扩展了。搞定!
问题本身没什么,但反映出来的问题却不可小视,那就是自己对原理性的东西关注不够,解决问题的方式也就只是从网上搜,或者求助于别人了,当然不是说这样不好,但要创造,要开创性做一些东西的话,显然这样是不可能办到的,给自己提个醒吧。
相关文章推荐
- JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype
- Javascript中的for in语句获取对象属性的顺序问题
- 讲解JavaScript中for...in语句的使用方法
- javascript 对象及原型继承有关的属性:constructor、prototype、isPrototypeOf、instanceof、in 、hasOwnProperty 等等
- 对数组Array进行原型prototype扩展后带来的for in遍历问题
- for...in也反复执行语句,但它是用来操作对象的
- javascript学习笔记(4)--with和for(in)对象语句
- for … in … 语句的使用
- javascript 对象及原型继承有关的属性:constructor、prototype、isPrototypeOf、instanceof、in 、hasOwnProperty 等等
- Eclipse Plug in 开发 学习点滴(1) - 有关ResourcesPlugin类的使用和MANIFEST.MF文件中的插件包添加问题
- javascript学习笔记(4)--with和for(in)对象语句
- 数组Array进行原型prototype扩展后带来的for in遍历问题
- 实用程序软件包(关于使用静态函数报错问题“Static function declared but not defined in C+++ "eh.h is only for C++!"报错问题)
- 关于oracle的sql语句中 for update 的使用,以及存在的问题
- JavaScript关于使用空函数来作为原型对象xx.prototype之间的桥梁的一些小问题
- 简易时钟 Date对象 for...in...语句 replace方法
- JavaScript - 对象专用语句[ for...in 语句 ]
- js 中的for ... in 语句的使用