Javascript 通过实例方法修改类的所有成员
在JavaScript中,是否可以对影响所有同级对象的对象调用实例方法 例如,假设我有以下课程:Javascript 通过实例方法修改类的所有成员,javascript,prototype,Javascript,Prototype,在JavaScript中,是否可以对影响所有同级对象的对象调用实例方法 例如,假设我有以下课程: function Thing(){ this.active=false; } Thing.prototype={ 建造师:东西, 激活:函数(){ this.active=true; }, 停用:函数(){ this.active=false; } };您需要一个实例数组,如下所示: var instances = []; 修改事物,如下所示: function Thing() { this
function Thing(){
this.active=false;
}
Thing.prototype={
建造师:东西,
激活:函数(){
this.active=true;
},
停用:函数(){
this.active=false;
}
};代码>您需要一个实例
数组,如下所示:
var instances = [];
修改事物
,如下所示:
function Thing() {
this.active = false;
instances[instances.length] = this;
}
通过迭代实现方法:
function activateAll() {
for (var index in instances) {
instances[index].active = true;
}
}
您可以概括如下:
function genericOperation(f, p) {
for (var index in instances) {
instances[index].f(p);
}
}
您可以将所有实例存储在一个数组中,并对它们进行迭代以更改其active
属性。但是,存储所有实例意味着它们不会被垃圾收集,因此会浪费内存。如果数组变大,迭代速度就会变慢
var Thing=(function(){//使用闭包隐藏`实例`
var实例=[];
函数事物(){
this.active=false;
实例。推(这个);
}
Thing.prototype.activate=函数(){
this.active=true;
};
Thing.prototype.activateAll=函数(){
forEach(函数(实例){
instance.active=true;
});
};
归还物;
})();代码>这可能会有所帮助:这是可能的,但您必须将所有活动对象实例的数组保留在某个位置,以便可以对该类型的每个对象进行迭代并调用方法。而且,如果您没有正确地从该数组中删除项,您可能会遇到垃圾收集问题。此外,对于..在数组成员上进行迭代被认为不是一个好主意,最好使用内置的forEach。而且应该有一种从实例中删除成员的方法。您可以将其定义为事物的属性。我真的不想做任何假设,这篇文章的读者应该有选择的自由。总的来说,成为事物的一种属性是好的。从实例中删除元素应该像简单的数组元素删除一样完成,并且需要析构函数或一些更干净的方法。我在答案中添加这些并不是为了保持简单。