【问题标题】:javascript object arraysjavascript对象数组
【发布时间】:2009-11-20 09:56:27
【问题描述】:

我需要将 java 中的代码迁移到 javascript。 在 java 中,我正在维护一个带有 key = string 和 value = 对象数组列表的哈希图

我需要在 javascript 中实现相同的功能:

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);

但是当我尝试获取指定键的属性时

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

我得到 value= id2,这是为 HashMapDataSet 对象设置的最后一个 id。

我试图模仿以下链接中指定的 javascript 中的 getter 和 setter: 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 相关联。请帮忙。

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    我不太确定你想在那里做什么,但在 javascript 中你不需要所有这些 java 接线,因为该语言具有内置的地图和列表。你的sn-p在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;
    

    【讨论】:

    • 在一般情况下,将对象用作地图并不是很安全。您只能拥有 String 键,并且使用某些与 Object 属性(如 toString)发生冲突的键会导致浏览器问题更加严重。
    【解决方案2】:

    javascript-closure-loop 问题很常见。

    我会花很多时间去:http://www.javascriptkata.com/2007/04/11/a-common-problem-with-the-powerful-javascript-closures/

    问候。

    【讨论】:

      【解决方案3】:

      对于不需要私有函数的类,可以直接使用特权函数:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 2016-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多