javascript 私有保护类型

来源:百度知道 编辑:UC知道 时间:2024/06/19 08:25:04
var _dataStore=function(){
var Data;
this.setData=function(data){Data=data};
this.getData=function(){return Data}
}
var Ds=new _dataStore()
va data=["aa","bb","cc"]
Ds.setData(data);
var d1=Ds.getData();
d1.shift()//会修改原数组.
alert(d1)
var d2=Ds.getData();
alert(d2)
我怎样设计_dataStore类才可以使d2的值保持为["aa","bb","cc"]
对一楼的答案:类型就只有数组一种,请问如何创建data的副本再给Data,谢谢
二楼:你试运行一下,最后的alert(d2)输出是空的,我要的是:aa,bb,cc .谢谢
三楼的方法是不是:var _dataStore=function(){
var Data;
this.setData=function(data){Data=data};
this.getData=function(){
var data=Data;
return data
}
}
var Ds=new _dataStore()
var data=["aa","bb","cc"]
Ds.setData(data);
var d1=Ds.getData();

alert(d1.shift())
alert(d1.shift())
alert(d1.shift())

var d2=Ds.getData()

this.getData=function(){var data=Data;return data}

哦,是了,是我搞错了。
因为你操作的是一个数组对象,所以,不能简单的用=号来复制数组,这样只会是对原数组的引用。
所以,你要用一种方法来复制数组。
用遍历法虽然显得比较笨,但也是效果最好的,不会造成其它问题的方法。
所以,修改如下:
this.getData=function(){
var data = [];
for(var i=0;i<Data.length;i++){
data[i] = Data[i];
}
return data;
}
刚刚打错一个字母,已修改

this.setData=function(data){
创建data的副本再传给Data。 可以先用typeof()函数先判断data的类型,再分别处理。
};

不清楚你要什么效果,你这样已经可以alert出 aa,bb,cc 这样
非要["aa","bb","cc"]的样子就需要转义序列了

我把关于d1的行删除 做过测试 可以输出 aa,bb,cc ,然后才回答的
你问题里的va data=["aa","bb","cc"] 打错了