JSON数据如:{"options":"[{/"text/":/"王家湾/",/"value/":/"9/"},{/"text/":/"李家湾/",/"valu
e/":/"10/"},{/"text/":/"邵家湾/",/"value/":/"13/"}]"}
用js可以写成:
1 var data=[{name:"a",age:12},{name:"b",age:11},{name:"c",age:13},{name:"d",age:14}]; 2 for(var o in data){ 3 alert(o); 4 alert(data[o]); 5 alert("text:"+data[o].name+" value:"+data[o].age ); 6 }
或是
1 <script type="text/javascript"> 2 function text(){ 3 var json = {"options":"[{/"text/":/"王家湾/",/"value/":/"9/"},{/"text/":/"李家湾/",/"value/":/"10/"},{/"text/":/"邵家湾/",/"value/":/"13/"}]"} 4 json = eval(json.options) 5 for(var i=0; i<json.length; i++) 6 { 7 alert(json[i].text+" " + json[i].value) 8 } 9 } 10 </script>
对象的存取方式有2种如下
meberA.name ; meberA.age
或者
meberA["name"]; meberA.["age"]
当存在此属性时将修改属性的值,当不存在时候自动创建一个新的属性,并且赋值
由于整个js都是由对象构成的,所以说可以用以下函数查看某个对象所有的属性
function showAllProper(objname,strobjname){
var result= "";
for (var p in objname)
reslut+=strobjname+"[""+p+""]="+objname[p]+"
";
return result;
}
使用时候
showAllProper(meberA,"mberA")
就会传回所有的属性
建立一个object对象大体有三种方法
1. 调用new运算符和Object对象 var obj=new Object() 或var obj=new Objct(value)
object对象没有任何属性,需要手动添加属性,方法如下
var memberA=new Object()
memberA.name="tony";
memberA.age=25;
或
meberA["name"]="tony";
meberA.["age"]=25;
2. 用大括弧{...}来直接描述属性和方法 var objectName={ propertyName1:value1,propertyName2:value2,propertyName3:value3 };
属性名称和属性值用冒号: 分开,每组属性用 逗号,分隔
如下所示
var memberA={
name:"tony",
age:25,
objpropname:{
propName1:value1,
propName2:value2
},
};
3. 自定义一个建构函数,然后和第一种方式一样用new来创建
function funcName( param1,param2,...,paramN){
this.property1=param1;
this.property2=param2;
....
this.propertyN=paramN;
}
声明完构建函数后,可以定义此对象类型对象:
var obj=new funcName(value1,value2,...,valueN);
定义对象的方法和定义对象属性很像,只要将函数名称指定给对象就可以了,或者直接定义函数
如下
function rect(w,h){
this.w=w;
this.h=h;
this.area=function(){
return this.w*this.h;
}
或
function calArea{
return this.w*this.h;
}
function rect(w,h){
this.w=w;
this.h=h;
this.area=aclArea;
}
注意定义完对象后可以使用delete来删除 属性或者对象
delete object_name;
delete object_name.property_name;
建立对象共同的属性和方法prototype
属性对象prototype就是让我们定义相同类型对象公用的属性和方法
function_name.prototype.property_name=proterty_value
具体如下
function calArea{
// this 会参考调用此方法的对象
return this.w*this.h;
}
function rect(w,h){
this.w=w;
this.h=h;
//this.area=aclArea;
}
rect.prototype.area=calArea;
建立对象公用属性后,可以用下面方式来参考值
function_name.prototype.poperty_name
或者
object_name.property_name
当读取公用的属性值或是调用公用的方法时,两种方式都可以,动脑是如果要更改公用的属性值,或者更改方法的定义
应该使用第一种方式,因为第二种方式会建立新的对象属性或者方法定义,并赋值。
新的对象属性是属于个别对象的,队日他们的名称和公用对象的属性名称一样,但它不是公用对象,类似于对象继承的override
建立类class的属性和方法
方法如下
function_name.property_name=proterty_value;
function_name.method_name=method_definition;
其中function_name为已经存在的建构函数名称
例如
function Circle(){
}
定义一个为PI的类属性
Circle.PI=3.14
定义一个为cal的类属性
Circle.cal=function(r){ return this.PI*r*r;};
其中this.PI和Circle.PI是一样的,这里的this不是调用此方法的对象参考,而是Circle本身的参考.
对象的继承
一个对象的构建函数可以借助它的prototype对象继承某个对象的所有属性
subfunction_name=new superFunction_name(...)
propotype 对象是用力定义由建构函数建立对象的共用属性和方法,所以将一个对象指定给它,使的prototype对象拥有此对象的所有属性和功能
例如
function Circle(radius)
{
this.radius=radius;
}
funcion colorCircle(radius,color){
this.radius=radius;
this.color=color;
}
function _toString{
return "cicle:="+this.radius;
}
colorCircle.prototype=new Circle(0) // 或者 new Circle,继承Circle所有的属性
colorCircle.prototype.toString=_toString; // 重载toString
constructor是prototype对象的一个属性,是对象构造函数的参考
function someFunc(){
...
}
x=new someFunc();
alert(x.constructor==someFunc);
会显示true
但是如下
function superFunc(){
}
function subFunc(){
}
x=new subFunc(); // x.constructor==subFunc
subFunc.prototype=new superFunc;
y=new subFunc(); // y.constructor==superFunc
alert(x.constructor==y.constructor);
会显示false
因为subObject的prototype变成了新建立对象的参考,而原来的prototype对象已经不在了,在继承前,prototype的constructor参考变成新对象的constructor参考
如果连续继承多次,那么它将会是最上层的constructor,解决方式是把它指回原来的constructor
subFunc.prototype.constructor=subFunc;
注意是用构造函数的subFunc的prototype.constructor不是对象的constructor
如果subFunc.constructor=subFunc;只会增加一个y的一个constructor属性