我对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?
答案 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)
(我来自移动设备,当我拿到电脑时,我会修复我的答案)