代码如下:var myObj=function(){
var accessNumber;
this.setAccessNumber = function(value) {
accessNumber = value;
};
this.getAccessNumber = function() {
return accessNumber ;
};
};
var cc =new myObj();
cc.setAccessNumber(8888888);
var dd=new myObj();
for(p in cc){
dd[p]=cc[p];
}
dd.setAccessNumber(23123123);
console.error(cc.getAccessNumber());//23123123我创建一个js 对象 myObj
然后创建两个实例,对其中一个赋值,另一个拷贝值为什么我对其中一个赋值,另一个也跟着变呢?好奇怪,function 里面还藏着引用,也被拷贝过去啦?
var accessNumber;
this.setAccessNumber = function(value) {
accessNumber = value;
};
this.getAccessNumber = function() {
return accessNumber ;
};
};
var cc =new myObj();
cc.setAccessNumber(8888888);
var dd=new myObj();
for(p in cc){
dd[p]=cc[p];
}
dd.setAccessNumber(23123123);
console.error(cc.getAccessNumber());//23123123我创建一个js 对象 myObj
然后创建两个实例,对其中一个赋值,另一个拷贝值为什么我对其中一个赋值,另一个也跟着变呢?好奇怪,function 里面还藏着引用,也被拷贝过去啦?
解决方案 »
- 如何用js判断输入的值是1-10000之间的整数。
- 在Firefox上如何用代码实现全屏?
- jquery如何获取ID
- 请教如何输出一个带两位小数的百分数0.00%
- 想知道在一个form中所有checkbox的length,如何解决?
- 同在一个框架里的两个HTML页面如何相互获取对方javascript脚本里的变量值?不能用cookie!!
- 急!关于innerhtml的错误?
- 是否可以用javascript改变form的enctype属性值
- easyui beginEdit多行编辑时速度感人
- 动态渲染关联的下拉表单
- 问一个javascript图片浏览程序
- cookie文件中,中括号中的递增数字表示什么?
var myObj = function() {
this.accessNumber = null;
this.setAccessNumber = function(value) {
this.accessNumber = value;
};
this.getAccessNumber = function() {
return this.accessNumber ;
};
};这样子就不一样了.
--------------------这里并不是楼主所说的引用了复制
alert(cc == dd); 就可以发现 cc 和 dd 并没有引用同一对象.为什么会这样子呢, 这里就是闭包的问题了.
得注意的是,按你这么的写法
accessNumber 并不会成为新构造出来对象的属性
而是 函数 myObj() 里的局部变量.new myObj() 的时候,新构造出来的对象有两个方法引用了 accessNumber
每构造一个对象的时候 就会形成一个闭包
构造了两个对象 cc, dd; 就有两个闭包产生了本来各个对象的 setAccessNumber, getAccessNumber 都引用不同闭包中的 accessNumber,也没什么问题但,把 cc 的属性复制给 dd 时。 当然函数也复制过去了。函数复制过去后dd.setAccessNumber 和 dd.getAccessNumber
就和 cc.setAccessNumber 和 cc.getAccessNumber
一样引用着同一个 accessNumber 变量了
以至于后面
dd.setAccessNumber(23123123);
后
cc.getAccessNumber() == 23123123
dd[p]=cc[p];
alert(p)
}