Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过实例方法修改类的所有成员_Javascript_Prototype - Fatal编程技术网

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

在JavaScript中,是否可以对影响所有同级对象的对象调用实例方法

例如,假设我有以下课程:

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。而且应该有一种从实例中删除成员的方法。您可以将其定义为事物的属性。我真的不想做任何假设,这篇文章的读者应该有选择的自由。总的来说,成为事物的一种属性是好的。从实例中删除元素应该像简单的数组元素删除一样完成,并且需要析构函数或一些更干净的方法。我在答案中添加这些并不是为了保持简单。