2009-11-20 164 views
0

我需要將Java中的代碼遷移到JavaScript。 在java中,我保持與關鍵=字符串值=對象JavaScript對象數組

我需要實現同在JavaScript的ArrayList的一個HashMap:

this.hashMap = new Hash(); 
this.hashMapArrayList =[]; 
... 
var hashMapDataSet = new HashMapDataSet(id1,name1,type1); 
this.hashMapArrayList[0] = hashMapDataSet; 
... 
this.hashMap.set(fileName1, this.hashMapArrayList); 

var hashMapDataSet1= new HashMapDataSet(id2,name2,type2); 
this.hashMapArrayList[0] = hashMapDataSet1; 
this.hashMap.set(fileName2, this.hashMapArrayList); 

但是,當我試圖讓該屬性指定key

this.hashMap.get(fileName1).getId() 

我得到value = id2,它是爲HashMapDataSet對象設置的最後一個id。

我試圖模仿getter和setter在javascript如下面的鏈接中指定: http://javascript.crockford.com/private.html

這裏是HashMapDataSet類

function HashMapDataSet(pId, pName, pType) { 
var id = pId; 
var name = pName; 
var type = pType; 

function getId1() { 
return id; 
} 
function setId1(mId) { 
id = mId; 
} 
.... 

this.getId = function() { 
return getId1(); 
}; 

this.setId = function (id) { 
setId1(id); 
}; 

... 
} 

其中getId1,setId1是私有方法和 的getId, setId是特權方法

我是JavaScript新手,所以我無法將java對象與javascript關聯起來。請幫助。

回答

1

我不太清楚你想在那裏做什麼,但在JavaScript中,你不需要所有的java接線,因爲該語言具有內置的地圖和列表。你的代碼片段可以在js中看起來像這樣:

this.hashMap = {}; 
this.hashMapArrayList =[]; 
... 
this.hashMapArrayList.push({id: id1, name: name1, type: type1}); 
... 
this.hashMap.fileName1 = this.hashMapArrayList; 

this.hashMapArrayList.push({id: id2, name: name2, type: type2 }); 
this.hashMap.fileName2 = this.hashMapArrayList; 
+0

一個目標是不是很安全的,因爲在一般情況下,地圖中使用。你只能有String鍵,並且使用與'toString'等Object屬性衝突的某些鍵會導致瀏覽器問題加劇。 – bobince 2009-11-20 13:41:27

0

爲類,你不需要專用的功能,你可以直接使用特權功能:

function HashMapDataSet(pId, pName, pType) 
    { 
     var id = pId; 
     var name = pName; 
     var type = pType; 

     this.getId = function() 
     { 
      return id; 
     }; 

     this.setId = function (pId) 
     { 
      id = pId; 
     } 
    }