gpt4 book ai didi

Javascript 对象数组 - 自杀式破坏

转载 作者:行者123 更新时间:2023-12-02 18:14:37 25 4
gpt4 key购买 nike

我有一个轻量级对象数组,每个对象都是观察者模式的主题。为了节省内存,当不再观察主题时,我想释放该对象的资源并使其从父数组中删除自身。那么,我如何要求父对象或数组本身从项目本身的代码中拼接项目呢?我想出的是这样的:

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 时?再说一次,看起来很笨拙。

最佳答案

为什么不直接在项目类中添加对父级的引用。

var parentObj = {
items : [],
addItem : function () {
var newItem = new ItemObj;
newItem.parent = this; // set the parent here
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 = {
parent: null,
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) {
this.parent.removeItem(this); // use the parent here
}
},
//observerAdd.... etc
};

关于Javascript 对象数组 - 自杀式破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com