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"

    }

}



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