通过对象id获取对象属性

时间:2014-10-15 03:06:23

标签: javascript javascript-objects

我对JS有点新,所以请描述一下。
我有两个对象实例,我需要将一个实例的属性值赋予另一个实例。据我所知,JS缺乏对内存中对象id(不是DOM ID)的支持,所以我必须创建这样的属性。目前我正在使用递归来创建多个对象,但它仅用于测试。

function MyObject(parentID, parentProperty) {
    this.id = parentID + 1
    this.myProperty = parentProperty + 1

    switch(this.id){
        case 5:
        break;

        default:
        new MyObject(this.id, this.myProperty)
    } 
}
var myObject = new MyObject(1, 1);

所以现在我有4个对象。如何获取对象的myProperty值,例如,id = 3?

3 个答案:

答案 0 :(得分:1)

如果需要使用属性值来检索对象,则需要将它们存储在Array或Object哈希中。我建议使用工厂方法来构造对象。在工厂方法中构造对象时,还会将这些对象引用存储在由其要在以后搜索的属性值键入的哈希/数组中。

例如,

(function(globalScope) {
    var objectCache = [],
        ObjectFactory;

    globalScope.ObjectFactory = ObjectFactory = {
        create : function(parentID, parentProperty) {
            var newObj = new function() {
                this.id = parentID + 1
                this.myProperty = parentProperty + 1                 
            };
            objectCache.push(newObj);
            return newObj;
        },
        findObjectById : function(parentId) {
            //iterate through objectCache and find your object and returna
        }
    };  
})(this);

将对象存储在Object散列(而不是Array)

var objHashCache = {};
var obj = new Object();
objHashCache[obj.id] = obj;

如果要通过ID检索对象,可以使用

return objHashCache[idToLookFor]

答案 1 :(得分:0)

我会在MyObject函数本身上存储一个静态的对象映射,其关键是id。在构造函数中填充该映射,然后您有一个创建对象的所有实例的映射。

在你的例子中:

function MyObject(parentID, parentProperty) {
    this.id = parentID + 1;
    this.myProperty = parentProperty + 1;
    MyObject.instances = MyObject.instances || {};
    MyObject.instances[this.id] = this;
}

for (var i = 0; i < 5; i++) {
    var myObject = new MyObject(i, i);
}
var thirdObject = MyObject.instances[3];

答案 2 :(得分:0)

基本上你必须遍历所有对象并找到具有条件的对象。

如果您了解linq并且更符合您的需求,您可以使用linq(http://linqjs.codeplex.com

(我来自移动设备,当我拿到电脑时,我会修复我的答案)