我有一组轻量级对象,每个对象都是观察者模式的主题。为了节省内存,当不再观察主题时,我想释放对象的资源并使其从父数组中删除。那么如何从项目本身的代码中要求父对象或数组本身拼接项目呢?我想出的是这样的:
var parentObj = {
items : [],
addItem : function () {
var newItem = new ItemObj;
items.push(newItem);
},
removeItem : function (item) {
for (var i = this.items.length; i--; i < 0) {
if (this.items[i] == item) {
this.items.splice(i, 1);
return;
}
}
}
};
function ItemObj() {}
ItemObj.prototype = {
observers : [],
observerRemove : function(observer){
//find observer in observers array and splice it out
....
//now here's the part where it gets tricky
if (this.observers.length == 0) {
parentObj.removeItem(this);
}
},
//observerAdd.... etc
};
哪个有效,但只是因为 parentObj 是一个命名变量,如果它是一个类,它就不会那么容易了。此外,这似乎有点笨拙。如果 ItemObj 可以对它的父 Array 对象有一些引用,那就太好了,但我找不到。有什么建议么?也许将来自 parentObj 自身的引用传递给每个 ItemObj?如在
newItem.parentArray = this.items;
创建 itemObj 时?再次,显得笨拙。