JavaScript对象与JSON

1.Javascript对象


JavaScript对象其实就是属性的集合,也就是说,给定一个JavaScript对象,我们可以明确的知道一个属性是不是这个对象的属性,

对象中的属性是无序的,并且是各不相同的(如果用同名的,则后声明的覆盖先声明的)。

一般来说,我们声明对象的时候对象往往只是一个空的集合,不包含任何的属性,通过不断的添加属性,使得该对象成为一个

有完整功能的对象,而不用通过创见一个类,然后实例化该类这种模式,这样我们的代码具有更高的灵活性,我们可以任意的增删对象的属性。

JavaScript对象的本身就是一个dictionary,或者Java语言中的Map,或者称为关联数组,即通过键来关联一个对象,这个对象本身又可以是一个对象,根据此定义,我们可以知道

JavaScript对象可以表示任意复杂的数据结构。


2.prototype

prototype是JS特有的一个概念,通过使用原型,JS可以建立其传统OO语言中的继承,从而体现对象的层次关系。

JS本身是基于原型的,每个对象都有一个prototype的属性来,这个prototype本身也是一个对象,因此它本身也恶意有自己的原型,

这样就构成了一个链结构。

访问一个属性的时候,解析器需要从下向上的遍历这个链结构,直到遇到该属性,则返回属性对应的值,或者遇到原型为null

的对象(JS的基对象Object的prototype属性即为null),如果此对象仍没有该属性,则返回undefined

下面我们看一个例子:

//声明一个对象base

function Base(name){

   this.name=name;

   this.getName=function(){

   return this.name;

}

}


//声明一个对象child

function Child(id){

   this.id=id;

   this.getId=function(){

   return this.id;

}


//将child的原型指向一个新的base对象

Child.prototype=new Base("base");


//实例化一个child对象

var c1=new Child("child");

//c1本身具有getId方法

print(c1.getId());

//由于c1从原型链上继承到了getName方法,因此可以访问

print(c1.getName());

得出结果:

child

base

由于遍历原型链的时候,是由下而上的,所以最先遇到的属性值最先返回,通过这种机制可以完成重载的机制。


}


3.this指针

在JS中,this表示当前上下文,即调用者的引用


//定义一个人,名字为jack

vat jack={name:"jack".

                  age:26

               }


//定义另一个人,名字为abruzzi

var abruzzi={

                      name:"abruzzi",

                        age:26

               }

//定义一个全局的函数对象

function printName(){

                 return this.name;

}


//设置printName的上下文为jack,此时的this为jack

print(printName.call(jack));

//设置printName的上下文为abruzzi,此时的this为abruzzi

print(printName.call(abruzzi));


4.使用对象

对象是JS的基础,

对象的声明有三种方式:

(1)  通过new 操作符作用域Object对象,构造一个新的对象,然后动态的添加属性,从无到有的构筑一个对象

(2)定义对象的"类":原型,然后使用new 操作符来批量的构筑新的对象

(3)使用JSON.


第二种方式:

//定义一个“类”, Address

function Address(street,xno){

     this.street =street ||'Huang Road';

      this.xno=xno  || 135;

      this.toString =function() {

       return "street:"+this.street+",No:" +this.xno;

      }

 }

//定义另一个"类",Person

 function Person (name,age,addr){

      this.name=name  ||'unknown';

     this.age=age;

       this.addr=addr||new Address(null,null);

    this.getName=function(){return this.name;}

    this.getAge=function(){return this.age;}

    this.getAddr=function(){return this.addr.toString();}

}


//通过new操作符来创建两个对象,注意,这两个对象是相互独立的实体

var jack=new Person('jack',26,new Address('Qing Hai Road',123));

var abruzzi=new Person('abruzzi',26);


//查看结果

print(jack.getName());

print(jack.getAge());

print(jack.getAddr());

print(abruzzi.getName());

print(abruzzi.getAge());

print(abruzzi.getAddr());

运行结果如下:

jack

26

street:Qing Hai Road,No:123

abruzzi

26

street:Huang Quan Road,No:135


4.json及其使用


例如:

var obj={

  name:"abruzzi",

  age:26,

  birthday:new Date(1984,4,5),

  addr:{

   street:"Huang Quan Road",

   xno:"135"

    }

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章