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"
}
}