zoukankan      html  css  js  c++  java
  • JSON 学习开发 object 对象

    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属性

  • 相关阅读:
    Easyui datagrid 修改分页组件的分页提示信息为中文
    Easyui datagrid 实现表格记录拖拽
    Java:内部类
    算法导论:Trie字典树
    算法导论:找零钱问题
    lintcode:组成最大的数
    lintcode:验证二叉查找树
    lintcode:将二叉查找树转换成双链表
    lintcode:二叉树的路径和
    lintcode:字符串置换
  • 原文地址:https://www.cnblogs.com/shangbolei/p/4980049.html
Copyright © 2011-2022 走看看