通过对象id获取对象属性

Getting object property through object id

本文关键字:取对象 属性 获取 id 对象      更新时间:2023-09-26

我对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个对象。如何获取id为3的对象的myProperty值?

如果需要检索具有属性值的对象,则需要将它们存储在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);

将对象存储在对象散列(而不是数组)中

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

当你想根据对象的ID检索对象时,你可以使用

return objHashCache[idToLookFor]

我会在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];

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

如果你知道linq,并且它更适合你的需求,你可以使用linq(http://linqjs.codeplex.com)

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