繼續上篇 文法遍:本篇介紹JS自訂對象。
在js中,可以用函數來類比對象的描述,可以有以幾種定義類描述對象的形式:
方式一: 只定義空的函數,用此函數描述new出一個具體對象後,在對象引用上加屬性與方法 如下:
[javascript]
//用js來描述人
function Person(){//相當於構造器。
//alert("person run");
}
//通過描述進行對象的建立。 new.
var p = new Person();
//動態給p對象添加屬性。直接使用p.屬性名稱即可。
p.name = "zhangsan"; //賦值後,然後要讀取屬性值,可直接通過p.屬性名稱即可。
p.age = 29;
//如果定義的p對象的屬性賦值為一個函數,即是給p對象添加一個方法。
p.show = function(){
alert("show :"+this.name+":"+this.age);
}
p.show(); //調用自訂對象的方法
方式二:通過構造器的方式來描述類,將對象的屬性與方法定義在函數體中。 如下:
[javascript]
function Person(name,age){
//在給Person對象添加了兩個屬性。
this.name = name;
this.age = age;
//給Person對象添加兩個方法,也間接說明js中函數可以嵌套函數的。
this.setName = function(name){
this.name = name;
}
this.getName = function(){
return this.name;
}
}
使用上面的Person對象就簡單了,與java類似 如下:
[javascript]
var p = new Person("張三",20);
for(x in p){
println(x+":元素值是:"+p[x]); //這裡的for in中,x為p對象中,所以成員。如x為name/age/getName...
}
p.setName("小強");
println("看看姓名哈::"+p["name"]) //對象["屬性名稱"] 也可查看屬性的值
println("通過方法看姓名哈::"+p.getName());
println("直接使用屬性看姓名哈:"+p.name);
方式三:通過將對象的屬性名稱與方法以 索引值對 形式封閉在一個大括弧{}中,這種方式構造出來的對象,不能new出新的對象,相當於var 物件變數名, 此物件變數名不可以再new。 如下:
[javascript]
//直接使用{}定義屬性和值的索引值對方式。索引值鍵通過:串連,鍵與鍵之間用逗號隔開。
var pp = {
//定義一些成員。
"name":"小明","age":28,
"getName":function(){
return this.name;
}
}
println("能看看值好嗎::"+pp["age"]+":"+pp.name +":"+pp.getName());
這種方式,更廣泛的應用在資料,以KVStore for Redis當作一個儲存容器物件來用,又如下:
[javascript]
var citys = {
"江蘇":["南京","蘇州","無錫","常州"],
"上海":["徐匯區","浦東區","寶山區"]
}
println("城市還可以這麼玩:"+citys.江蘇[1]); //開心的話,可以拿到江蘇後,給江蘇來個遍曆
for(var i=0;i<citys.江蘇.length;i++){
println("江蘇的::"+citys.江蘇[i]);
}
總結:一般來說呢,
1. 若是為了儲存資料的,資料以索引值對形式的話,用方式三就洽當不過了。
2.若要儲存資料,但資料不需要索引值對的話,用普通數組就O了。
3. 若要玩轉類型java中的對象,可以使用方式二,比較直觀。